我想问一下如何用一路PWM信号来控制一个直流电机的转速
我想用一个电位器+ADC+PWM+小直流电机.用电位器来控制电机的转速.
借此初步了解怎样形成自己想用的PWM信号 简单的很三,改变脉宽就改变转速了三 道理我都明白。只是没有头述。
没有谁详细系统的讲一讲吗。 VR----->10bit ADC(vref=5V)------>set 10bit PWM(OCR值)------->功率管驱动------>电机
VR输出1V电压 ADC=1024*1/5=204.8, OCR1=204 (脉宽20%),电机的转速也接近20%
VR输出4V电压 ADC=1024*4/5=819.2, OCR1=819 (脉宽80%),电机的转速也接近80% 我买的是网站的试验板子。就是马老师的那个AVR-51的板。请问能用上面的2003来驱动吗。一个很小的电机。只是为了试验的。
正在看书。先了解再发问。 2003可以,最好在电机两端反并一个1n5819二极管(1n4001也行) HJJourAVR;
能不能请你看一下我的那个《〈初学AVR做的ADC数值显示在1602上〉》的贴子。里面有些问题想请教一下。在那个贴子的第7楼。先谢谢了。我基本上只要上班就一直在OURAVR上了。论坛上搞了在线时间多好。那我的积分多高啊。哈哈。
-----此内容被gongcsf于2005-10-28,15:24:03编辑过 是7楼?
1 主程序必须为一个无限循环。
你的程序其实是运行到了最到地址然后从0x0000再来一遍,所以你不觉得。
2 你这个0b00000000很郁闷,每次都要看手册,很烦的。
干嘛不用 (1<<ADIF) 之类,明确易懂。
3 adc=ADC是没有问题的,C编译器会自动处理16位寄存器的读写。不要自以为 干嘛不用 (1<<ADIF) 之类,明确易懂。
因为没有哪本书上面胡介绍这个用法啊。
AVR的书难找啊。我知道你应该也在东莞吧。东莞的图书馆我跑完了。新的旧的。全跑了。AVR的就没有几本书。
(1<<ADIF) 是ADIF右移一位吧。那ADIF本身是多少呢。 网上的书很多,
还看实物图书馆,old date了
GCCAVR全部都是这样写的
C语言基础
ADIF就是4 跟手册的为定义是一样的
(1<<ADIF) =(1<<4)=0b00010000
ADCSR=(1<<ADIF); //只是ADIF位 =1,其他=0
ADCSR|=(1<<ADIF); //只是ADIF位 =1,其他不变
ADCSR&=~(1<<ADIF); //只是ADIF位 =0,其他不变
while(ADCSR&(1<<ADIF)) ;//等待ADIF位为0,才退出循环,执行下一步
还有,你的TXC,RXC是什么?
while(UCSRA&=TXC)位不能这样操作 谢谢HJJ。我先消化一下。哈哈。
TXC RXC 是串口的发送完成及接收完成的标志位啊。
应该是老书上这样写的。可能真的是AVR快了所以我感觉不到错误。
我改成像你上面写的那样吧。
再次感谢
哈哈。我刚学。 while(1)
{
while(ADCSR&(1<<ADIF)) ;//等待ADIF位为0,才退出循环,执行下一步
{
程序......
}
}
可否理解为等待ADIF为1,时运行程序,如果ADIF不为1(ADC转换没完成)就一直在while(1)里循环检测ADIF呢.
页:
[1]