查看: 1689|回复: 20
|
PIC16F877a (40pin) (控制DC Motor 速度)
[复制链接]
|
|
请问谁会PIC16F877a 的C Programming?
我要用它来控制motor 的speed.
请问谁会写他的code?
谢谢。
[ 本帖最后由 pic 于 4-10-2008 08:25 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 30-9-2008 09:12 AM
|
显示全部楼层
原帖由 东邪西毒 于 29-9-2008 10:16 PM 发表
请问谁会PIC16F877a 的C Programming?
我要用它来控制motor 的speed.
请问谁会写他的code?
谢谢。
嗯。。。这里有很多人会你要做的东西, 但是不会有人给你现成的答案。
你说控制motor, 是什么motor呢?
如是普通的DC motor, 你可以用PWM 来控制。
希望你努力google找找看, 你遇到问题再回来问。
也请参考版规看看, 设法“一次过”说清楚, 不要问一句, 答一句。 |
|
|
|
|
|
|
|
楼主 |
发表于 30-9-2008 02:19 PM
|
显示全部楼层
谢谢,google 我是找到不要再找了。
我是用DC motor 和 8 bit-Digital-Analog Converter,
mean 0-5v is cut into 256 pieces。
max speed (1111 1111) 是 5V,
min speed (0000 0000)是 0V.
我曾问过老师,他们都说上网找,用pwm 的办法是找的,就是读了又读,还是不明白,所以就来论坛。
我曾找到以下的code,但就是不知要改哪一个变数来控制speed。请各位指点。
#include "Motor.h"
long ADCValue=0;
long ADCValueOld=1;
#byte portA = 0X05
#byte portB = 0X06
#byte portC = 0X07
void main()
{
set_tris_A(0b00101011);
set_tris_B(0b00000001);
set_tris_C(0b00000000);
portA=0X00;
portB=0X00;
portC=0X00;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(FALSE);
setup_counters(RTCC_INTERNAL,WDT_288MS);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_1,255,1);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_PWM);
enable_interrupts(global);
set_adc_channel(0);
delay_us(10);
while(1)
{
ADCValue = Read_ADC();
delay_ms(100); // monitor 10 times a second
if ( ADCValue != ADCValueOld )
{
set_pwm2_duty(ADCValue);
ADCValueOld = ADCValue;
}
}
} |
|
|
|
|
|
|
|
发表于 30-9-2008 05:49 PM
|
显示全部楼层
原帖由 东邪西毒 于 30-9-2008 02:19 PM 发表
谢谢,google 我是找到不要再找了。
我是用DC motor 和 8 bit-Digital-Analog Converter,
mean 0-5v is cut into 256 pieces。
max speed (1111 1111) 是 5V,
min speed (0000 0000)是 0V.
我曾问过老师 ...
根据你的说法,
你的 DAC 是直接出电压去驱动(output of DAC connected to DC Motor) 的吗?
如是,你的问题就非常容易解决,
只要在一个时段内(DAC conversion time) send 一次去其中一个 port, 就可以了。
完全不用PWM. |
|
|
|
|
|
|
|
发表于 30-9-2008 07:44 PM
|
显示全部楼层
pwm 是用duty cycle 来control,不需要DAC,可能需要 driver
用 port ++/port -- 就能换 port 的output |
|
|
|
|
|
|
|
楼主 |
发表于 30-9-2008 09:31 PM
|
显示全部楼层
回复 4# mwl_86 的帖子
对,output of DAC connected to DC Motor!
请问我的code 中有pwm 的地方如何改? |
|
|
|
|
|
|
|
发表于 30-9-2008 09:46 PM
|
显示全部楼层
原帖由 东邪西毒 于 30-9-2008 09:31 PM 发表
对,output of DAC connected to DC Motor!
请问我的code 中有pwm 的地方如何改? 不是 DAC是 ADC
你的code 是 analogue input ,直接去mcu,compare 后就output pwm
set_pwm2_duty(ADCValue);
什么叫做如何改?
改成什么?
[ 本帖最后由 sushi-x 于 30-9-2008 10:23 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 30-9-2008 10:25 PM
|
显示全部楼层
回复 7# sushi-x 的帖子
吓!
我会apply 5V to 8-bit DAC, mean 5V cut into 256 pieces, 1 piece is about 0.02V
如果我要在首3 seconds给motor 0.32V,就把input 0000 1111 to DAC。
如果我要在另3 seconds给motor 2.5V(half of max Voltage),就把input 1000 0000 to DAC。
如果我要在另3 seconds给motor 3.42V,就把input 1010 1010 to DAC。
then, digital will convert to analog to control the motor speed.
所以,用DAC很合理啊。。。 |
|
|
|
|
|
|
|
发表于 1-10-2008 07:14 AM
|
显示全部楼层
第一:你给的code是 Analogue input PWM output,不是 digital output
第二:请声明你要用digital output 还是 pwm output,input 是 digital 还是analogue
第三:请声明什么类型的motor,servo,stepper之类
第四:如果要digital output就很简单,去google参考和了解一些input output的application。
我只会avr,不知道CCS或PIC的asm。 |
|
|
|
|
|
|
|
发表于 1-10-2008 09:23 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 1-10-2008 03:46 PM
|
显示全部楼层
回复 10# pic 的帖子
应用是。。。
我要设计一个robot, auto robot, means when turn on, it will run and stop base on code.
我用dual motor drive 来控制两个轮(1左 1右)
如果是走直线,自然不用control speed 这东西。
我要让我的robot能转弯。如:要转左,就放慢左轮的速度。
由于是刚开始学, 我的load 就只有circiut board, 大概300g吧,对motor 的影响应该不大吧。 |
|
|
|
|
|
|
|
发表于 1-10-2008 04:07 PM
|
显示全部楼层
原帖由 东邪西毒 于 1-10-2008 03:46 PM 发表
应用是。。。
我要设计一个robot, auto robot, means when turn on, it will run and stop base on code.
我用dual motor drive 来控制两个轮(1左 1右)
如果是走直线,自然不用control speed 这东西。
我 ...
终于理解了。。。
建议你用两个Software PWM 来控制。。
如果你要用之前DAC的方法, 我也不反对, 因为你会学到更多东西。 |
|
|
|
|
|
|
|
楼主 |
发表于 1-10-2008 04:13 PM
|
显示全部楼层
回复 9# sushi-x 的帖子
以上的code, 我只是当作参考,不要误会。
版主,我要我的robot 在固定的时间内,自行控制左轮或右轮的速度。我会用9V的电池启动。所以我可以说我要digital input, analog output,对吗?
刚想到,load 也包括9V电池。
[ 本帖最后由 东邪西毒 于 1-10-2008 04:15 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 1-10-2008 06:22 PM
|
显示全部楼层
原帖由 东邪西毒 于 1-10-2008 04:13 PM 发表
版主,我要我的robot 在固定的时间内,自行控制左轮或右轮的速度。我会用9V的电池启动。所以我可以说我要digital input, analog
如果真的只是单纯的在固定的时间内,自行控制左轮或右轮的速度, 那只要有两个Digital output 做成的PWM就够了。
那为什么还要input呢?
MCU可以用PIC16F628A。
你的Motor 是5V的还是9V的?是大是小?确定够推动你的load吗?
建议不要去用什么7805把电弄小然后供给motor用, 可以考虑直接用3粒~4粒1.5VAA/AAA电池。 |
|
|
|
|
|
|
|
楼主 |
发表于 1-10-2008 08:36 PM
|
显示全部楼层
大约明白了,dc motor 的款式还在和朋友争议当中,只是code那边还不是很会改写。
谢谢大家,有问题再来问。 |
|
|
|
|
|
|
|
发表于 2-10-2008 09:19 AM
|
显示全部楼层
原帖由 东邪西毒 于 1-10-2008 08:36 PM 发表
大约明白了,dc motor 的款式还在和朋友争议当中,只是code那边还不是很会改写。
谢谢大家,有问题再来问。
编程Coding是不会困难, 你爬旧帖可以看到我之前发的Software PWM ,CCS C code。
反而是机械的部分, 你的robot会不会走直线 , 这个还要花一点心机。
记得KFC在多年前有推出一个小玩具车, 你可以program它要怎么走, 左转, 右转, 向前, 停止等等复杂动作, 还会发出音效。
那个玩具车的样子很像Kembara, 不知大家还有印象吗?呵呵~ |
|
|
|
|
|
|
|
发表于 2-10-2008 12:57 PM
|
显示全部楼层
原帖由 东邪西毒 于 30-9-2008 10:25 PM 发表
吓!
我会apply 5V to 8-bit DAC, mean 5V cut into 256 pieces, 1 piece is about 0.02V
如果我要在首3 seconds给motor 0.32V,就把input 0000 1111 to DAC。
如果我要在另3 seconds给motor 2.5V(half of max V ...
dac通常只是supply reference voltage.也既是说, supply current不足够来drive一个motor. (除非你的motor draw < 1ma的电,还是你的DAC output current很高, 基本上我没看过这种dac.)
所以用pwm是最简单的方法。一直adjust他的duty cycle就可以了。 |
|
|
|
|
|
|
|
发表于 2-10-2008 12:58 PM
|
显示全部楼层
原帖由 pic 于 2-10-2008 09:19 AM 发表
编程Coding是不会困难, 你爬旧帖可以看到我之前发的Software PWM ,CCS C code。
反而是机械的部分, 你的robot会不会走直线 , 这个还要花一点心机。
记得KFC在多年前有推出一个小玩具车, 你可以program它 ...
没这个印象, 不过lego mindstorm也是类似的产品。 很贵一下。 |
|
|
|
|
|
|
|
发表于 2-10-2008 10:18 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 7-10-2008 06:11 PM
|
显示全部楼层
请问那kfc 的车,也是用pic来program吗?
再问谁有pic16f877的中文C language参考书?能否卖给我?
我爬过贴了,大都答非所问。
所以我再问。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|