搜索
bottom↓
回复: 11

我想问一下如何用一路PWM信号来控制一个直流电机的转速

[复制链接]

出0入0汤圆

发表于 2005-10-28 11:45:26 | 显示全部楼层 |阅读模式
我想用一个电位器+ADC+PWM+小直流电机.

用电位器来控制电机的转速.

借此初步了解怎样形成自己想用的PWM信号

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2005-10-28 13:49:52 | 显示全部楼层
简单的很三,改变脉宽就改变转速了三

出0入0汤圆

 楼主| 发表于 2005-10-28 13:55:58 | 显示全部楼层
道理我都明白。只是没有头述。

没有谁详细系统的讲一讲吗。

出0入0汤圆

发表于 2005-10-28 14:17:04 | 显示全部楼层
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%

出0入0汤圆

 楼主| 发表于 2005-10-28 15:05:00 | 显示全部楼层
我买的是网站的试验板子。就是马老师的那个AVR-51的板。请问能用上面的2003来驱动吗。一个很小的电机。只是为了试验的。

正在看书。先了解再发问。

出0入0汤圆

发表于 2005-10-28 15:06:57 | 显示全部楼层
2003可以,最好在电机两端反并一个1n5819二极管(1n4001也行)

出0入0汤圆

 楼主| 发表于 2005-10-28 15:13:33 | 显示全部楼层
HJJourAVR;

   能不能请你看一下我的那个《〈初学AVR做的ADC数值显示在1602上〉》的贴子。里面有些问题想请教一下。在那个贴子的第7楼。先谢谢了。我基本上只要上班就一直在OURAVR上了。论坛上搞了在线时间多好。那我的积分多高啊。哈哈。
-----此内容被gongcsf于2005-10-28,15:24:03编辑过

出0入0汤圆

发表于 2005-10-28 15:24:48 | 显示全部楼层
是7楼?

1 主程序必须为一个无限循环。

  你的程序其实是运行到了最到地址然后从0x0000再来一遍,所以你不觉得。



2 你这个0b00000000很郁闷,每次都要看手册,很烦的。

  干嘛不用 (1<<ADIF) 之类,明确易懂。



3 adc=ADC  是没有问题的,C编译器会自动处理16位寄存器的读写。不要自以为

出0入0汤圆

 楼主| 发表于 2005-10-28 15:30:20 | 显示全部楼层
干嘛不用 (1<<ADIF) 之类,明确易懂。

因为没有哪本书上面胡介绍这个用法啊。

AVR的书难找啊。我知道你应该也在东莞吧。东莞的图书馆我跑完了。新的旧的。全跑了。AVR的就没有几本书。

(1<<ADIF) 是ADIF右移一位吧。那ADIF本身是多少呢。

出0入0汤圆

发表于 2005-10-28 15:39:00 | 显示全部楼层
网上的书很多,

还看实物图书馆,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)位不能这样操作

出0入0汤圆

 楼主| 发表于 2005-10-28 15:44:34 | 显示全部楼层
谢谢HJJ。我先消化一下。哈哈。

TXC RXC 是串口的发送完成及接收完成的标志位啊。

应该是老书上这样写的。可能真的是AVR快了所以我感觉不到错误。

我改成像你上面写的那样吧。

再次感谢





哈哈。我刚学。

出0入0汤圆

 楼主| 发表于 2005-10-28 22:33:06 | 显示全部楼层
while(1)

{

while(ADCSR&(1<<ADIF)) ;  //等待ADIF位为0,才退出循环,执行下一步

{

程序......

}

}

可否理解为等待ADIF为1,时运行程序,如果ADIF不为1(ADC转换没完成)就一直在while(1)里循环检测ADIF呢.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 04:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表