当前位置:首页 >> 信息与通信 >>

avr或51单片机pwm控制小车左右电机并调速

avr 或 51 单片机 pwm 控制小车左右电机并调速,红外对管检测的程序

// Crystal: 8.0000Mhz #include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int uint discrepancy=0; //function declaration void port_init(void); void motor(uchar index, uchar speed);//input PWM wave void sensor_state(void);//get the running condition void revise_to_line(void );//0=run forward,1=left,2=right,3=sever left,4=sever right void delayms(uint MS) ; //call this routine to initialize all peripherals void init_devices0(void) { //stop errant interrupts until set up CLI(); //disable all interrupts timer0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x02; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } //initialize T/C1 void timer1_init(void) { TCCR1B = 0x00;//停止定时器 TIMSK |= 0x00;//中断允许 TCNT1H = 0x00; TCNT1L = 0x00;//初始值 OCR1AH = 0x00; OCR1AL = 0xF0;//匹配 A 值 OCR1BH = 0x00; OCR1BL = 0xF0;//匹配 B 值 ICR1H = 0xFF;

ICR1L = 0xFF;//输入捕捉匹配值 TCCR1A = 0xA1; TCCR1B = 0x01;//启动定时器 } //call this routine to initialize all peripherals void init_devices1(void) { CLI(); //禁止所有中断 timer1_init( ); MCUCR = 0x00; MCUCSR = 0x80;//禁止 JTAG GICR = 0x00; SEI();//开全局中断 } //PWM 调速,通过改变占空比,周期性地开闭使能端,调节电机的有效电压。 //use PD4,PD5 to output PWM,speed(0~255) void motor(uchar index, uchar speed) { if(index==1) {OCR1AH = 0x00; OCR1AL =speed; } if(index==2) {OCR1BH = 0x00; OCR1BL =speed; } } //delay time by ms void delayms(uint MS) { uint i,j; for( i=0;i<MS;i++) for(j=0;j<1141;j++); //1141 是在 8MHz 晶振下 } //port initial void port_init( ) {

DDRA = 0x00;//input running state DDRB = 0xFF;//control two motors DDRC = 0x00; DDRD = 0x30;//PWM wave PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; PORTD = 0x30; } /*****************传感器函数********************/ //获取小车的行驶状态。0(直线),1(左偏),2(右偏),3(严重左偏), 4(严重右偏) //从左到右传感器(光电对管)对应的输入端口:PA0,PA1,PA2,PA3,PA4 //正常行驶时引导线夹在 PA1,PA3 之间 //根据端口 PA0,PA1,PA3,PA4 的值判断行驶状态。(中间传感器 PA2 并未 使用) void sensor_state(void) { uchar state,state1,state2

;//暂存 PINA0~PINA4 相应位的值

state1=0b00000010&PINA;state2=0b00000001&PINA; if(state1==0b00000010) { if(state2==0b00000001) {discrepancy=4; return;} else {discrepancy=2;return; } } state1=0b00001000&PINA;state2=0b00010000&PINA; if(state1==0b00001000) { if(state2==0b00010000) {discrepancy=3; return;} else {discrepancy=1; return;} } //补充严重左偏或严重右偏的情况 state=0b00000001&PINA; if(state==0b00000001) {discrepancy=4;return; } state=0b00010000&PINA;

if(state==0b00010000) {discrepancy=3;return ;} discrepancy=0;

} /************************循迹函数******************/ //ENA---PD4,ENB---PD5,PORTB0~3----IN1~3 ,L298 电机驱动电路 //PB0,PB1 控制右电机,PB1,PB2 控制左电机 void revise_to_line( )//0=run forward,1=left,2=right,3=sever left,4=sever right { if (discrepancy==0) { //PORTB=0b11111001; PORTB|=((1<<PB3)|(1<<PB0)); PORTB&=~((1<<PB1)|(1<<PB2)); delayms(10); return; } if (discrepancy==1) { //PORTB=0b11111000; PORTB|=(1<<PB3); PORTB&=~((1<<PB0)|(1<<PB1)|(1<<PB2)); while((0b00001000&PINA)==0b00001000);//get the value of PINA3 return; } if (discrepancy==2) { // PORTB=0b11110001; PORTB|=(1<<PB0); PORTB&=~((1<<PB1)|(1<<PB2)|(1<<PB3)); while((0b00000010&PINA)==0b00000010) ;//get the value of PINA1 return; } if (discrepancy==3) { // PORTB=0b11111000; PORTB|=(1<<PB3); PORTB&=~((1<<PB0)|(1<<PB1)|(1<<PB2));

while((0b00001000&PINA)==0b00001000);//get the value of PINA3 return; } if (discrepancy==4) { PORTB|=(1<<PB0); PORTB&=~((1<<PB1)|(1<<PB2)|(1<<PB3)); while((0b00000010&PINA)==0b00000010) ;//get the value of PINA1 return; } } //main function:action structure // // void main(void) { port_init(); init_devices1( ); //set speed value motor(1,200); motor(2,200); while(1) { sensor_state( ); revise_to_line( ); } }


相关文章:
avr或51单片机pwm控制小车左右电机并调速.doc
avr 或 51 单片机 pwm 控制小车左右电机并调速,红外对管检测的程序 /
PWM电机调速原理及51单片机PWM程序经典.doc
Pwm 电机调速原理 对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的...P1_4=1; }< 1.下面是 AVR 的程序,51 产生 PWM 波麻烦,可以用 AVR。主要...
基于51单片机的小型直流电机PWM调速系统设计_图文.pdf
本系统控制电路简单,实现 方便,可广泛应用于各类玩具小车或小型直流电机调速领域。 【关键词】51单片机;直流电机调速;PWM;PID 中图分类号:TN1 统电路连接见图2。...
PWM电机调速原理及51单片机PWM程序经典_图文.pdf
PWM电机调速原理及51单片机PWM程序经典_信息与通信_工程科技_专业资料。特
PWM电机调速原理与51单片机PWM程序经典.doc
PWM电机调速原理与51单片机PWM程序经典_计算机硬件及网络_IT/计算机_专业资料。Pwm 电机调速原理对于电机的转速调整,我们是采用脉宽调制( PWM )办法,控制电机的时候,...
51单片机控制直流电机PWM调速.doc
51单片机控制直流电机PWM调速 - 51 单片机控制直流电机 PWM 调速 实验目的 1.掌握脉宽调制 (PWM) 的方法。 2.用程序实现脉宽调制,并对直流电机进行调速控制。 ...
AVR单片机实现的直流电机PWM调速控制器.pdf
AVR单片机实现的直流电机PWM调速控制器 - 介绍一种新型的主要由AVR单片机8535和 L298驱动构成的直流电机PWM调速控制器.详细介绍了本调速控制系统的工作原理、光电编码...
PWM脉冲宽度调制与智能小车PWM直流电机调速_图文.ppt
51单片机实训课程 作者:小王老师 欢迎进入云龙电子科技大讲堂 www.yunlongdz.cn PWM基础知识 与 智能小车PWM直流电机调速 欢迎进入云龙电子科技大讲堂 www.yunlongdz...
用AVR单片机实现直流电机PWM调速.pdf
AVR单片机实现直流电机PWM调速 - 各种电机控制器件 驱动芯片... 用AVR单片机实现直流电机PWM调速_信息与通信_工程科技_专业资料。各种电机控制器件 驱动芯片 ...
51单片机控制直流电机PWM调速C语言程序.doc
51单片机控制直流电机PWM调速C语言程序 - #include<reg5
单片机产生PWM控制直流电机的转速_图文.ppt
PWM信号输入 光电隔离处理 功率驱动级 负载电源 智能小车电机调速案例分析 ? 在智能小车的硬件电路基础上,利用AT89S51的定时器T0和T1实现PWM功 能控制小车的转弯...
基于51单片机的PWM直流电机调速报告_图文.doc
51 单片机PWM 直流电机调速 摘要直流电机脉冲宽度...PWM 技术得到了高速发展,各式各样的脉宽调速控制器,...AVR、ARM、8086 和 MSP430 等,2010 年又增加了 ...
PWM调速的小车控制系统实现.pdf
小车的设计与制作 (项目编号 545 )成, 实现电机 PWM 调速、 智能小车避障...avr或51单片机pwm控制小... 5页 免费 喜欢此文档的还喜欢 智能...
基于51 单片机的PWM 控制直流电机四象限调速系统_图文.pdf
06 月 25 日 题目及要求设计题目: 基于 51 单片机PWM 控制直流电机四象限调速系统 设计内容: 1、用 51 单片机设计 PWM 用于驱动控制电路并利用仿真软件仿真...
基于51单片机的PWM直流电机调速系统_图文.pdf
皇:jj7 内蒙古大学硕士学位论文 基于51单片机PWM直流电机调速系统 摘要 在现代社会,自动控制系统遍及我们生活领域的各个方面,如在工业自动 化中的应用:轧钢设备...
51单片机H桥电路控制电机正反转和PWM调速_图文.doc
51单片机H桥电路控制电机正反转和PWM调速 - 搭了个 H 桥电路,控制电机的正反转和 PWM 调速,程序是网上的,改改引脚就能用,电路和 源程序如下: 功能:P1.1 ...
15、基于单片机STC89C52的直流电机PWM调速控制系统.doc
15、基于单片机STC89C52的直流电机PWM调速控制系统 - 基于慧净电子智能小车的直流电机PWM 调速控制系统 第一章:前言 Pwm 电机调速原理 对于电机的转速调整,我们是...
PWM电机调速原理及51单片机PWM程序经典.doc
PWM电机调速原理及51单片机PWM程序经典_电子/电路_工程科技_专业资料。Pwm 电机调速原理 对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候, 电源并非...
寻迹小车c程序, 用89c51单片机控制的 用tcrt5000红外反....txt
89C51单片机控制的汇编程序 4 2009-4-30 求89C51单片机与红外遥控信号接收器用Keil c语言设计程序 2010-12-1 求用avr或51单片机pwm控制小车左右电机并调速,...
基于51单片机的PWM直流电机调速系统设计开题报告_图文.doc
基于51单片机PWM直流电机调速系统设计开题报告_信息与通信_工程科技_专业...都要求局部或全部的自动化,因此必然要与各种控制元件 组成的自动控制系统联系起来...
更多相关标签: