竹风xu 发表于 2012-7-28 23:18:38

ATmega128 使用PWM对四路电机进行调速

最近在做一个智能小车的题目,我用的是四个直流电机,想用PWM进行调速,不知道128里面怎么输出四路PWM,望高手指教

Marxt 发表于 2012-7-29 16:48:01

看看手册上的相关引脚和相关寄存器的介绍,有几个可以输出PWM的!

竹风xu 发表于 2012-7-29 17:10:16

我现在的情况是我用T/C1 产生两路PWM,但PE5的占空比不知道怎么控制它,我是这样写的:()
#include<iom128v.h>
#include<macros.h>
void PWM(unsigned int f0,unsigned int t0)
{
DDRE |=0xff;//设置为输出PD5 PD6
               //PD6频率为设置频率(PD5)的一半,占空比仍为50%
TCCR3A=0xab;//设置波形模式   15
TCCR3B=0X1B;//以及时钟选择,64分频
OCR3A=8000000/f0/64-1;//200HZ7372800/200/64-1=TOP575
OCR3B=OCR3A*t0/100;//1/5占空比TOP/5
}


/********主函数*********/
void main(void)
{
PWM(1000,60);
while(1);
}

竹风xu 发表于 2012-7-29 17:11:13

DDRE |=0xff;//设置为输出PD5 PD6
               //PD6频率为设置频率(PD5)的一半,占空比仍为50%
不好意思,这地方没改过来,之前是16写的

竹风xu 发表于 2012-7-29 17:58:52

    问题解决了,我选错了波形产生模式,WGM3=0111   十位的快速PWM,然后分别设置OCRnA/OCRnB/OCRnC就行了!之前的程序频率只受OCRnA控制,占空比只受OCRnB控制。
   现在的频率通过分频来控制,占空比由OCRnA/OCRnB/OCRnC控制,不过出来的波形不是0~5V,出现了负值,我不知道有没有其他方法,现在想用外部加法电路来补偿,有其他方法的希望多多指教

竹风xu 发表于 2012-7-30 20:10:44

耦合方式选错了

ainimorest 发表于 2012-10-24 07:54:33

记录,不错哈哈

lebaitong 发表于 2012-10-24 09:47:42

尝试一下

xiaoluoshan 发表于 2012-11-5 16:11:07

尝试一下
页: [1]
查看完整版本: ATmega128 使用PWM对四路电机进行调速