pic单片机控制直流电机

合集下载

直流无刷电机控制PIC程序(最新)

直流无刷电机控制PIC程序(最新)

#include <pic168xa.h> //2008.4.24--14点00分#include <math.h>#include <stdlib.h>int charge_delay,jm,lkk,trial,run_num,protect_num;char m,n,k,s,L,tri;char hall_num; //循环次数char hall_number; //1+3+2+10+8+9=33(一个循环和),hallless_protect()int pwm_hi; // pwm占空比上限int pwm_cycle; // pwm周期int pwm_lo; // pwm占空比下限,由A/D结果确定int pwm_real; // pwm占空比实际int ad_result; // A/D转换结果bit ghy,run_flag; //运行标志---0,未运行,停止bit flag_autohand; //开始为-----自动void delay(delay_num)int delay_num;{int j;for (j=delay_num;j>1;j--){asm("nop");}}union adres{int y1;unsigned char adre[2];}adresult;void para_chushihua(){protect_num=0;trial=0b10110000;tri=0x00;lkk=10;hall_num=0x00;hall_number=0x00;run_flag=0; //运行标志---0,未运行,停止flag_autohand=1; //开始为-----自动pwm_cycle= 240; // pwm周期// pwm_hi=pwm_cycle-5; // pwm占空比上限pwm_hi=pwm_cycle-1; // pwm占空比上限pwm_real=pwm_cycle; // 实际pwm占空比为pwm周期上限pwm_lo=0x0A; //设定下限+++++++++++++++++++++++++++++++++++++++++++++++}void nointerupt_chushihua(){INTCON=0X00; //禁止中断}void Io_chushihua(){// ADCON1=0x8e; //RA0/AN0--VOLTAGE 电压采样,右对齐1 ADCON1=0x86; //设定RA0--RA6设定为I/O口;TRISA =0x09; //RA0---PROTECT保护(电流保护和过温保护)--输出,0--不保护,1--保护;//RA1----PSW1,继电器,输出,0,电源接通//RA2----指示灯,输出0--->>//RA3----按键,加,输入 1//RA4----指示灯,输出0--->>//RA5----RSW1,继电器,输出0,软启充电PORTA=PORTA&0x09; //RA1=0,----输出低电平,PSW1,继电器断//RA2=0,----输出低电平,指示灯灭//RA4=0,----输出低电平,指示灯灭//RA5=0,----输出低电平,RSW1,继电器断RBPU=0; //RB端口内部弱上拉电路禁止TRISB =0xfe; //RB7=1, 空----输入//RB6=1----HA,输入//RB5=1----HB,输入//RB4=1----HC,输入//RB3=1----停,输入,按钮//RB2=1----启,输入,按钮//RB1=1----自/手选择,输入,开关//RB0=0----ST/STOP,输出,控制GAL PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出TRISC =0x02; //RC7---A1+,PWMA1+,输出0//RC6---A1, 输出0//RC5---B1+,输出0//RC4---B1,输出0//RC3---C1+,输出0//RC2---CCP1(PWM),输出,死区0//RC1----减,输入,按钮 1//RC0---C1,输出0 PORTC=0x06;}void protect(){ //过流和过温保护GIE=0; //关全局中断pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2PORTC=0x00; //PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出while(1){PORTA^=0b00010100;delay(15000); //延时}}void protect_run(){ //过流和过温保护GIE=0; //关全局中断pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2PORTC=0x00; //PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出while(1){// PORTA^=0b00010000; //RA4闪动PORTA^=0b00000100; //RA2闪动delay(15000); //延时}}void PWM_chushihua(){// CCPR1L=0xa0;// CCPR1H=0x00;run_num=0;pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2}void open_loopf() //开环运行50次,启动{k=0b00011000; //5 //HA,HB,HC,s=PORTC&0b00000110; //1 0 1, B-C+PORTC=k|s; //delay(8000); //延时k=0b10010000; //4 //HA,HB,HC,s=PORTC&0b00000110; //1 0 0, A+B-PORTC=k|s; //delay(8000); //延时k=0b10000001; //6 //HA,HB,HC,s=PORTC&0b00000110; //1 1 0, C-A+PORTC=k|s; //delay(8000); //延时k=0b00100001; //2 //HA,HB,HC,s=PORTC&0b00000110; //0 1 0, B+C-PORTC=k|s; //delay(8000); //延时k=0b01100000; //3 //HA,HB,HC,s=PORTC&0b00000110; //0 1 1, A-B+PORTC=k|s; //delay(8000); //延时k=0b01001000; //1 //HA,HB,HC,s=PORTC&0b00000110; //0 0 1, C+A-PORTC=k|s; //delay(8000); //延时}void interrupt RB4_int(){char th;run_num++;if(run_num>10){run_num=10;}m=PORTB;//RB7-HA,RB5-HB,RB4-HCm&=0xB0; //1 0 1 1m^=0x90;//A=/A,B=B,C=/C //1 1n=m>>4; //switch(n){ //HA,HB,HC,// case 1: k=0b01001000;break; //0 0 1, C+A-// case 3: k=0b01100000;break; //0 1 1, A-B+// case 2: k=0b00100001;break; //0 1 0, B+C-// case 10:k=0b10000001;break; //1 1 0, C-A+// case 8: k=0b10010000;break; //1 0 0, A+B-// case 9: k=0b00011000;break; //1 0 1, B-C+// default:k=0b00000000; //其它(000,111),0x00,输出为无效case 1: k=0b00011000;break; //1 0 1, B-C+case 3: k=0b01001000;break; //0 0 1, C+A-case 2: k=0b01100000;break; //0 1 1, A-B+case 10:k=0b00100001;break; //0 1 0, B+C-case 8: k=0b10000001;break; //1 1 0, C-A+case 9: k=0b10010000;break; //1 0 0, A+B-default:k=0b00000000; //其它(000,111),0x00,输出为无s=PORTC&0b00000110; //取RC1,RC2状态PORTC=k|s; //输出PORTCif (RB7==0) {trial&=0b00110000;} //RB7=0if (RB5==0) {trial&=0b10010000;} //RB5=0if (RB4==0) {trial&=0b10100000;} //RB4=0if (lkk>1) {lkk--;} //每20次测试一次// tri=n;// if ((tri&=0b00001000)==0) {trial&=0b00110000;} //RB7=0// tri=n;// if ((tri&=0b00000010)==0) {trial&=0b10010000;} //RB5=0// tri=n;// if ((tri&=0b00000001)==0) {trial&=0b10100000;} //RB4=0// if (lkk>2) {lkk--;} //每20次测试一次else{while(trial!=0b00000000){GIE=0; //关全局中断pwm_real=pwm_hi; //PWM_real----PWM实时值CCPR1L=pwm_real; //设置PWM输出为最大CCPR1H=0x00; //CCP1CON=0x0c; //CCP1选择为PWM工作方式PR2=pwm_cycle; //设置PWM的周期TRISC=TRISC&0xfb; //设置RC2---PWM输出T2CON=0x00; //分频系数=0x00TMR2ON=1; //启用TMR2PORTC=0x00; //PORTB=PORTB&0xfe; //RB0=0,----输出低电平,禁止GAL输出while(1){PORTA^=0b00010000; //RA4闪动for (jm=15000;jm>1;jm--){asm("nop");}}}trial=0b10110000;lkk=10;}RBIF=0;}void max_min_compare(){if (pwm_real>pwm_hi) pwm_real=pwm_hi;if (pwm_real<pwm_lo) pwm_real=pwm_lo;}para_chushihua(); //参数初始化nointerupt_chushihua(); //禁止中断初始化Io_chushihua(); //I/O初始化PWM_chushihua(); //PWM初始化RA1=0; //RA1-PSW1发送低电平,接通电源RA5=0; //RA5-RSW1发送低电平,主电路充电延时RA2=0; //RA2,指示灯灭RA4=0; //RA4,指示灯灭delay(100); //主电路充电延时RB0=0; //ST/(-STOP)发送低电平,禁止GAL输出delay(100);RA1=1; //RA1-PSW1发送高电平,接通电源for(charge_delay=0;charge_delay<50;charge_delay++){delay(15000);}RA5=1; //RA5-RSW1发送高电平,主电路充电延时delay(100); //主电路充电延时PP: asm(" nop"); //RBIF=0; //禁止RB4-7中断,清RBIF 标志设定RBIE=0; //禁止RB4-7中断,RBIE设定GIE=0; //关全局中断RA2=0; //RA2,指示灯灭RA4=0; //RA4,指示灯灭run_flag=0; //运行标志---由RB2按钮设置while(run_flag==0) //----------主程序-------------//{ //RB2启动键,低电平有效if (RB2==0) run_flag=1; //运行标志---由RB2按钮设置delay(100); //延时} //while(run_flag==1) //运行,则执行......{int ope; //设定开环运行次数为12次int openloopn; //RB0=1; //ST/(-STOP)发送高电平,开放GAL输出delay(100); //延时RA4=1;// pwm_real=180;pwm_real=230;delay(500); //延时// ope=10; //设定开环运行次数为20次ope=3; //设定开环运行次数为20次for (openloopn=0;openloopn<=ope;openloopn++){ //00 0000000000000000CCPR1L=pwm_real; //设置开环下PWM输出值----130open_loopf(); //开环运行20次,启动} //----------------------- //000000000000000000delay(6000); //延时RBIF=0; //RB4-7中断,RBIF标志设定RBIE=1; //RB4-7中断,RBIE设定GIE=1; //开全局中断RA2=1; //-----------------------pwm_real=pwm_hi; //-----------------------ghl: asm(" nop"); //if ((pwm_real<110)&&(run_num<10)) //如果pwm_real<140,但是run_num<10,表明未动,则{ //protect_run();protect_run();}while(RA0==1) //RA0=1,过流和过温保护{ //delay(150); //调用延时程序protect_num++; //if (protect_num>30)//如果30次保护,则认为是真正保护(过温和过流保护软件滤波){protect();} //过流和过温保护} //protect_num=0; //if(RB1==1) flag_autohand=1; //自/手标志设定,标志设定else flag_autohand=0; //RB1=1---AUTO;自动//RB1=0---HAND;手动//----------------------- if (flag_autohand==1){ //111 11111111111111111if (pwm_real>pwm_lo) pwm_real-=1; //自动else pwm_real=pwm_lo;}//11111111111111111111else{if(RA3==0) //加(低有效), 则{if (pwm_real<pwm_hi) pwm_real+=1;else pwm_real=pwm_hi;}if(RC1==0) //减(低有效),则{if (pwm_real>pwm_lo) pwm_real-=1;else pwm_real=pwm_lo;}}max_min_compare();CCPR1L=pwm_real; //设置PWM输出delay(4500); //调用延时子程序while(RA0==1) //RA0------过流和过温保护输入,高电平保护{ //protect(); //过流和过温保护} //while(RB3==0){ //RB3停机键,低电平有效run_flag=0; //运行标志---由RB3按钮设置}if (run_flag==0) //停机,则跳转至......{for(;pwm_real<pwm_hi;pwm_real++){delay(2000); //至上限否?CCPR1L=pwm_real; //设置PWM输出为最大}RB0=0; //ST/(-STOP)发送低电平,禁止GAL输出para_chushihua(); //参数初始化nointerupt_chushihua(); //禁止中断初始化PWM_chushihua(); //PWM初始化run_num=0;goto PP;}else{// run_num=0;goto ghl;}}// goto PP;}。

pic单片机 直流无刷电机控制程序

pic单片机 直流无刷电机控制程序

pic单片机直流无刷电机控制程序下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!Title: PIC单片机直流无刷电机控制程序Introduction在现代工业控制系统中,直流无刷电机的应用越来越广泛。

PIC单片机的直流电机PWM调速系统

PIC单片机的直流电机PWM调速系统

收稿日期:2004-09-24 修订日期:2004-10-09作者简介:张红娟(1977-),女,山东烟台人,上海大学机电工程与自动化学院硕士研究生,研究方向是机电一体化及机器人技术。

基于PIC 单片机的直流电机PW M 调速系统张红娟,李 维(上海大学机电工程与自动化学院,上海200072)摘 要:介绍了基于PIC16F877单片机构成的直流电机调速系统,电机控制芯片采用了L298芯片,该系统使用光电编码器作为检测传感器,通过PW M 的输出信号实现对直流电机的调速。

同时介绍PIC16F877单片机中与PW M 相关的寄存器设置,给出硬件电路和控制程序的简要设计。

关键词:PIC 单片机;直流电机;PW M 中图分类号: 文献标识码:A 文章编号:1001-4551(2005)02-0010-03PWM R egulating Speed System of DC Motor B ased on PIC MicrocontrollerZH ANG H ong 2juan ,LI Wei(School o f Mechanical and Electronic Engineering and Automation ,Shanghai Univer sity ,Shanghai 200072,China )Abstract :A kind of speed regulation system for DC m otor composed of PIC16F877microcontroller and L298was described.This system uses photoelectric coder as speed detecting sens or ,uses digital PI D control method ,and uses PW M signal as control output to regulate DC m otor speed.And the setting of relative registers of PW M regulating speed in PIC microcontroller was intro 2duced.The hard circuit and s oftware design were given.K ey w ords :PIC microcontroller ;DC m otor ;PW M PIC16F877是Microchip 公司生产的8位单片机产品,可以实现在线调试和在线编程。

基于PIC单片机的永磁无刷直流电动机速度控制

基于PIC单片机的永磁无刷直流电动机速度控制
图1 是一 个 典 型 的 双 闭环 反 馈 直 流 电 机 调 速 系 统, 它包 括 了一个 速 度 调 节 环 和一 个 电流 调节 环 。首
1 控 制 原 理
永磁 无刷 直流电 动机具 有 交流 电机 的结构 和 直流 电机 的特 性 , 气 隙磁 场 和感 应 电势 为梯 形 波 ,为 了 其 提高效 率 ,一般只 在梯形 波 的平 顶 部分 通 以 电流 。定
方 法 。 完成 了 用 PC单 片机 为 主 控 芯 片 , I 2 3S为 功 率驱 动 芯 片 , 行 电子 换 相 、 I 以 R 12 进 电流检 测 和 P WM 调 速 的方 法 。 关 键 词 :单 片机 ;直 流 电机 ; WM 调 速 P
中 图 法分 类号 : P 6 . T 381 文献 标 识 码 : B 文章 编号 :1 0 — 1 4 2 0 ) 5 0 7 — 3 0 49 3 ( 0 7 o — 0 50
项为 电磁转矩 部 分 , 就 是 由无 刷 直 流 电 动机 产生 的 也 转矩部 分 。通 过公 式 可 以看 出 , 电 动势 与 电 动机 的 反 转速成 比例 , 而转 矩 与 相 电流 也几 乎 成 比例 。根 据 这 特点 , 我们采 用 P C单 片 机进 行 无 刷永 磁 直流 电动 I
MI R C I 公 司 推 出 的 PC ( eih r Itr c C O HP I P r ea ne ae p l f
通 直流 电动机相 同 , 电磁 转矩 与 磁通 和 电流 幅值 成 其
正 比,所 以控制 逆变器 输 出方 波 电流 的幅值 即可控 制 无 刷直 流 电动机 的转矩 。
0 引 言
永磁无 刷直 流电动 机 以起 动力矩 大 、 载能 力强 、 过

PIC单片机控制直流电机转速毕业设计

PIC单片机控制直流电机转速毕业设计

基于PIC18F458的直流电动机PWM调速控制系统设计张杰(甘肃农业大学工学院学院农电班06级)摘要:当今,自动化控制系统已经在各行各业得到了广泛的应用和发展,而直流驱动控制作为电气传动的主流在现代化生产中起着主要作用。

长期以来,直流电动机因其转速调节比较灵活,方法简单,易于大范围平滑调速,控制性能好等特点,一直在传动领域占有统治地位。

它广泛应用于数控机床、工业机器人等工厂自动化设备中。

随着现代化生产规模的不断扩大,各个行业对直流电机的需求愈益增大,并对其性能提出了更高的要求。

为此,研究并制造高性能、高可靠性的直流电机控制系统有着十分重要的现实意义。

本文设计是一套基于PIC单片机的直流电机控制器,作为其配套的试验装置。

论文根据系统的要求完成了整体方案设计和系统选型,针对所设计的控制方案对控制系统的软、硬件设计作了详细论述。

硬件部分先作了整体设计,然后介绍了以PIC16F458单片机为核心的硬件构成,对键盘电路、测量电路、显示电路等作了详细阐述;软件部分采用模块化设计思想,编制了各个模块的流程图。

论述了软件的设计思想和方法;实现了对直流电动机转动参数的设置、启动、停止、加速、减速和显示等功能。

利用PIC系列芯片进行低成本直流电动机控制系统的设计,能够简化系统构成、降低系统成本、增强系统性能、满足更多应用场合的需要。

针对直流电机运行环境恶劣、干扰严重的特点,从系统的硬件设计、软件设计等多方面进行抗干扰的综合考虑,并利用多种软件和硬件技术来提高和改善系统的抗干扰能力,有效地提高了系统的可靠性和实用性。

关键词:直流电机,PIC单片机,速度控制Abstract Nowadays,automatic control systems have been widely used and developed in Every aspect of life. As the artery in the area of electric drive systems DC drives become more and more important in modem Production. For a long time,DC motor has Possessed the main role in the areaof electric drive because of its neatly adjustment, simple method and smooth timing in a wide range,besides,its control Performance excellent. DC motor is widely used on the automatic equipments,such as CNC and industrial robot. As the scale of Production becomes larger and larger,the demand and requirements become higher and higher ,so the research on improving the DC controlling system behavior has important sense.This design is a system of DC motor multiple speeds Based on PIC MCU is designed,as its necessary test equipment. It finished the total Project design of system and model selection .The hard ware and software design of the system according to the Preceding solutions are discussed detailed. For the hardware Part after a dissertation on the whole design,the core hardware of the control system is the PIC MCU,the Paper introduced the details of some hardware Problem,including input circuit of keyboard,measure circuit,display circuit and so on .The method of software Planning for it is also discussed. For the software Part,with the Introduction of modular design concept some Procedure flow charts of main Program subroutine are offered. The Paper designs the software which achieves the functions,such as install Parameters,download Parameters,startup,stop accelerate and decelerate. This new family of PIC enables cost-effective design of controllers for DC motors which can fulfill more conditions,consisting of fewer system component,lower system cost and increased Performances.Aiming at the characteristic of bed environment and serious disturbance,many kinds of software and hardware technology are applied to improve systematic anti-interference ability,which comprehensively improve systematic dependability and Practicability.It has been Proved by experiments that this system can make the high Precise and multiple speed motor control come true. Stepping out the Performance index is realize Now this system hasbeen Put into experiment.Keywords DC Motor ; PICMCU,Speeds Control1 绪论1.1 引言当今,自动化控制系统已经在各行各业得到了广泛的应用和发展,而直流调速控制作为电气传动的主流在现代化生产中起着主要作用,无论是在工农业生产、交通运输、国防、航天航空、医疗卫生、商务与办公设备、还是在日常生活中的家用电器都大量使用着各式各样的电气传动系统,其中许多系统有调速的要求:如车辆、电梯、机床、造纸机械等等。

PIC12F675单片机实现直流电机的控制

PIC12F675单片机实现直流电机的控制

PIC12F675单片机实现直流电机的控制当前小型要求不太高的调速装置,如晒图机,用可控硅相位控制,供给直流电机。

还使用双基极管,以产生脉冲。

用一片单片机取代上述控制现在成为可能。

生产中不用调试,增加许多功能,如零位起动(去掉了外部硬件连锁)、可选速度上升时间等功能。

使系统操作维修方便,运行可靠。

直接电机控制电路示于图1。

PIC12F675 有6 个I/O,现用4 个。

设定GP1 为A/D 输入,作为速度给定口,现用电位器0—5V 输入。

设零中断输入口,接到产生过零脉冲A 定GP2 为电压过处。

设定GP3 和GP5 为一般I/O,GP3 为开停机输入口,接到开关上。

GP5 为脉冲输出口,经电阻接到触发三极管基极上。

触发的控制方法:在全波整流器输出端,电容滤波前,用三极管取出过零脉冲。

GP2 中断,对半周波记时器(相角计数器)清零。

表示相角计数器从零开始,再使用TMR0 溢出100µs中断(当然也可以再小些,以增加角度的分辨率),在中断中对半周波计时器加1,和比较相角的给定,是否相等?如相等,发脉冲的允许信号为ON,脉冲一直发到半周波结束。

发多脉冲的原因,是直流电机的特殊要求。

在0—90 度相角,反电势大于电源电压时,发触发脉冲也触发不了可控硅。

用一个脉冲触发不了可控硅。

必须等到电机速度下降,反电势小于电源电压时才能触发可控硅,产生电流跳动,转速跳动。

用多脉冲触发时,第一个不能触发第二个第三个……自适应有效的触发。

速度上升时间控制:用一个跟随量与半周波记时器比较如相等,发脉冲的允许信号为ON,跟随量跟随速度给定。

跟随的方法是按照用户的要求设定,定时的大小,定时进入比较,对跟随量加减1 控制。

还可以设定起始的爬行速度,高速度限幅等。

此电路应用于晒图机,去掉了外部硬件零位起动连锁,起动时间符合要求,运行平稳。

基于dsPIC单片机的无刷直流电机控制系统

基于dsPIC单片机的无刷直流电机控制系统
wa i l , u t e o e s e d r g lt n wa o v n e t ssmp e f r h rm r , p e e u a i s c n e i n o
n a d s o t t i h sa i t m o wi h g b l y h h t i
极的A 相控制信号, 其阴影部分为通 过 自 举得 到
的高端驱动, 毛刺是 由杂散 电感 引起。 为电机 图8
的反电势波形。
图7 I 10 R2 1 的HO LLO 出波 形 ( 1RP ) 输 78 M
通过对 以上的波形分析和L D C 的观察, 表明
本系统是完全可行 的, 在最低速和额定转速之间 电机稳定运转。 改变电机负载时转速的变化也符 合闭环要求。

2雷
浩. 无位 置 传感 器 无 刷 直 流 电动机 控 制 系统 研 究 【 . 中科 D】华
技大学,0 6 20.
I 。I I _ . :
Rf B^伽 黼 1 删 S J O| f 搿 协
3 何礼 高 等. s I 0 电机 与电 源 系列 数 字信 号 控制 器 原理 与应 用 dPC3 F 【 . 京 : 京 航空 航 天 大学 出版社 , 0 7 . M】 北 北 2 0年 4王晓明, 周青 山. 动机 的DS 电 C控制 一 一 微 芯 公司 dP C 用 . sI应 北 京 : 京 航 空 航 天大 学 出版 社 , 0 9 . 北 20年

清时值清断数 l 定器 ,中计值
自带 保护 功能 , 护 引脚 为S 当其 为高 电平 保 D, 时, 封锁I 2 的输出, 10 R 1 通过 采样主电路中的
图 4 I 0 中断服 务 流程 NT 的

基于PIC单片机的直流电机控制器的设计

基于PIC单片机的直流电机控制器的设计
张立丽,王洪波:基于 PIC 单计片算机机的直工流程电与机设控计制器C的om设pu计ter Engineering and Design
2009,30 (11) 2681
嵌入式系统工程
基于 PIC 单片机的直流电机控制器的设计
张立丽 1, 王洪波 2 (1. 燕山大学 电气工程学院,河北 秦皇岛 066004;2. 燕山大学 机械工程学院,河北 秦皇岛 066004)
P13
电流控制 1
P14
电流控制 2
P15
电流控制 3
P16
电流检测,与指令值的比较,FET 操作
P17
位置速度复合控制 1
P18
位置速度复合控制 2
P19
位置速度复合控制 3
P20
电流检测,与指令值的比较,FET 操作
P21
选定控制模式下 PWM 信号输出运算 1
P22
选定控制模式下 PWM 信号输出运算 2
收稿日期:2008-10-09;修订日期:2008-12-05。 作者简介:张立丽 (1958-),女,黑龙江人,工程师,研究方向为伺服控制系统; 王洪波 (1956-),男,河北内丘人,博士,教授,研究方向 为机器人技术。E-mail:hongbo_w@
2682 2009,30 (11)
计算机工程与设计 Computer Engineering and Design
PC or Microc omput er
Position Control Velocity Control Current Control Other Command
Positi on Ve loci ty
Current Other Information
1 设计思想
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实用标准文案目录1 总体设计框架 (3)2 硬件电路设计 (4)2.1 芯片介绍 (4)2.2 驱动电路 (9)2.3 按键控制电路 (10)3 程序编写 .................................................103.1 工作原理 (10)21程序书写过程3.2 ......................................................参考资料 (16)精彩文档.实用标准文案直流电机驱动Abstract 摘要:本文主要内容是利用PIC18F452单片机来控制直流电机,通过L293NE来驱动电机,通过按键来使其正转,反转。

Keywords 关键词:直流电机,PWM,L293NE精彩文档.实用标准文案总体设计框架1硬件电路利用驱动芯片L293D来驱动直流电机,按键则是单独引出。

如图1所示。

软件则是C语言编程。

PI驱C直动1流8电电F路机452图1硬件设计框精彩文档.实用标准文案2硬件电路设计2.1 芯片介绍首先,总体说明硬件电路设计,如图2 原理图,图3 PCB图以及图4板子的图所示。

三个输入信号,如图分别为RD4,RD5,RD6连上光耦的2脚,然后通过光耦的4脚引入L293D的使能引脚(12EN)以及输入引脚(1A,2A),然后L293D的输出引脚(1Y,2Y)通过H-桥型控制电路与直流电机连接。

图2 直流电机控制部分原理图精彩文档.实用标准文案PCB图图3直流电机控制部分成品板图4其中红线圈表示直流电机控制部分。

下面详细介绍各个芯片。

PIC18F452、1外部端口以及内部存储器是相同的。

上图的与PIC18F452PIC18F4580 。

U2精彩文档.实用标准文案2、光耦P521光耦主要的作用是保护单片机。

光耦的结构如图5所示。

图5 光耦P521结构在PCB中(如图6所示),即U7,U9,U10三个光耦,左下方方形孔为1引脚,按逆时针方向,依次为2,3,4引脚。

光耦的1脚通过电阻与电源连接,2脚为输入引脚,3脚与地相连,4脚为输出引脚。

经试验测得,则当1脚输入高电平时,4脚也输出高电平。

则当1脚输入低电平时,4脚输出低电平。

图6 光耦外形图精彩文档.实用标准文案3、电阻一共用到7个大小为470Ω的电阻(分别为R16,R17,R18,R19,R20,R21,R22)和3个大小为1kΩ(分别为R23,R24,R25)。

4、按键按键电路也就是步进电机驱动实验的电路。

在此,再介绍一次。

所用按键为标准B3F—1000系列,结构图如图7所示。

PCB板上SW1,SW2,SW3,SW4,SW5为按键,其中SW1为复位开关,其他的为控制作用的按键。

按键的机理以SW5为例阐述,其他类同。

按键的3引脚一是直接分别与RA1,RA2,RA3,RA4相连二是通过四个470Ω的电阻与电源相连。

按键1引脚分别与地相连。

当不按按键的时候,RA4通过R19电阻与+5V电源相连,即此时RA4的输入为高电平,即1。

当按键SW5按下时,RA4通过按键的连接与地相连,此时RA4的输入为低电平,即0。

通过SW5按键控制RA4的高低电平。

程序可监控RA4的状态,来控制电机。

发现RA4高电平则正转,发现RA4低电平则反转。

精彩文档.实用标准文案按键图图7引脚。

此按键3板所示,按键右下方方形孔为PCB1引脚,左上方为如引脚。

1与3只用到IN4007、5结,有阳极和阴极所示),通常它包含一个8PN整流二极管(如图区P区的载流子是电子。

外加使区相对NP两端。

区的载流子是空穴,N),称为为正的电压时,能通过大电流,具有低的电压降(典型值0.7V正向导通状态。

若加相反的电压,则反向电流很小(反向漏电流),称为反向阻断状态。

整流二极管具有明显的单向导电性。

有白色线圈的为负极。

所示。

二极管,组成桥式电路。

如图四个 IN40079精彩文档.实用标准文案8 IN4007图桥式电路图9,反向截止时无电IN4007在正向导通时,其电压为0.59V经测定,压。

这里的整流二极管主要起保护的作用。

当有个过冲信号,如电压过打开,避免高电压冲击直流电机,将其损坏,信号流向电源,D2高,此时打开,避免低电压冲击直流电机。

信号此而不是电机。

若是电压过低,D4时流向了地。

L293D6.精彩文档.实用标准文案L293D采用16引脚DIP封装(如图10所示),其内部集成了双极型H-桥电路。

这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。

L293D通过内部逻辑生成使能信号。

H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。

电机需要3个控制信号12EN、1A、2A,其中12EN是使能信号,1A、2A为电机转动方向控制信号,1A、2A分别为1,0时,电机正转,反之,电机反转。

选用一路PWM连接12EN引脚,通过调整PWM的占空比可以调整电机的转速。

引脚图图10 L293D 12EN高电平有效,HEAT SINK AND GROUND 接地,VCC1与VCC2接电源。

1A输入高电平则1Y输出高电平。

1A输入低电平则1Y输出低电平。

2A2Y,3A3Y,4A4Y关系类同。

2.2驱动电路光耦1脚通过四个470Ω的电阻分别与电源连接。

三个光耦的2脚(DC1, DC2 ,DC3)分别于RD4,RD5,RD6连接。

光耦的4脚与电源连接。

光耦的3脚分别通过三个1KΩ与驱动芯片L293NE连接。

然后驱动芯片L293NE的两个输出引脚引出通过桥式整流电路连上直流电机。

如图11所示。

精彩文档.实用标准文案驱动电路图11按键控制电路2.3相连二是通过四个,RA4RA3RA1,RA2,按键的3引脚一是直接分别与 1引脚分别与地相连。

470Ω的电阻与电源相连。

按键 SW4来使电机反转。

正常状态下,为正转,通过按键程序编写3工作原理3.1四个RA3RA2,RA0L293NE来驱动直流电机。

,RA1,本次实验主要利用RD2来使直流电机转动。

RD0,RD1,输入信号,通过高低电平控制”文件夹。

工程文件请参考“DC_MOTOR所示。

供电。

如图+5V12与原厂电路板的连接:+5V电源由原厂电路板(右下方)连GND+5VGND+5VJ6自制板(左下方)的,分别与原厂电路板,精彩文档.实用标准文案接。

两个电路板的RD4,RD5,RD6分别相连(使能与两个输入信号接入自制板中),同时,RA4也连起来(按键信号接入自制板中)。

如图13所示。

自制板J2(右上方)的RD4,RD5,RD6分别与原厂电路板的RD PORT(中间靠右一些)的4,5,6连接。

自制板J5的RA4(右下方)与原厂电路板的RA PORT4(中间靠右一些)连接。

直流电机的两个引脚与J7即DC MOTOR连接。

如图14所示。

电机的L,R引脚分别与J7的左(即1),右(即2)引脚相连。

输入输出口的连接图12精彩文档.实用标准文案电源的连接13 图电机的连接14 图精彩文档.实用标准文案3.2 程序书写过程程序如下:#include<p18f4580.h>void delay(unsigned int x); void main(){TRISD=0;//定义D端口为输出口TRISA=0Xff;//定义A端口为输出入口PORTDbits.RD4=0;//使能位初始化为0PORTDbits.RD5=0;//电机的左引脚控制信号初始化为0PORTDbits.RD6=0;//电机的右引脚控制信号初始化为0while(1){PORTDbits.RD4=1;//使能位设置为1,使能电机,使其工作if(PORTAbits.RA4==0){delay(10);if(PORTAbits.RA4==0){PORTDbits.RD5=1;PORTDbits.RD6=0;}精彩文档.实用标准文案}else{PORTDbits.RD5=0;PORTDbits.RD6=1;}}}void delay(unsigned int x){unsigned int a,b;for(a=x;a>0;a--)for(b=54;b>0;b--);}该程序主要包括初始化模块,控制模块,以及延时模块。

1、初始化模块主要是端口初始化。

输入端RA的所有端口设置为高电平即1,为输入状态。

RD的所有端口设为低电平即0 ,为输出状态。

RD4, RD5, RD6初始化为0,清空状态,以便后面的赋值。

程序如下所示:TRISD=0;//定义D端口为输出口TRISA=0Xff;//定义AD端口为输出入口PORTDbits.RD4=0;//使能位初始化为0PORTDbits.RD5=0;//电机的左引脚控制信号初始化为0PORTDbits.RD6=0;//电机的右引脚控制信号初始化为0精彩文档.实用标准文案2、控制模块控制模块主要是扫描键盘的变化,根据相应键盘的变化,来使直流电机转动。

如果SW5没有按下,正转。

如果SW5按下,则反转。

while(1)表示一直循环下去。

程序如下所示:while(1){PORTDbits.RD4=1;//使能位设置为1,使能电机,使其工作if(PORTAbits.RA4==0) 若 SW5按键按下则反转{delay(10);if(PORTAbits.RA4==0){PORTDbits.RD5=1;PORTDbits.RD6=0;}}else SW5 按键没有按下则正转{PORTDbits.RD5=0;PORTDbits.RD6=1;}}是否有按键按下,有防抖动的作用。

如果语句判断if 其中,两个SW5PORTDbits.RD5=1;也SW5则,PORTAbits.RA4==0实确就下按被则,精彩文档.实用标准文案PORTDbits.RD6=0;则电机左引脚高电平,右引脚低电平,反转。

反之,即没有按键按下,则电机左引脚低电平,右引脚高电平,正转。

3、延时模块标准的延时程序,通过循环语句来延时。

此程序对应4M晶振时,unsigned int x中输入的数字,即为延时的毫秒数。

void delay(unsigned int x){unsigned int a,b;for(a=x;a>0;a--)for(b=54;b>0;b--);}参考资料以下是本文中的主要参考资料清单:[1] Muhammad Ali Mazidi,Rolin D.McKinlay,Danny Causey.李中华,张雨浓,陈卓怡等译.PIC技术宝典[M].北京人民邮电出版社,2008.[2] Myke Predko著.胡光华译.PIC微控制器基础与实践[M].北京:科学出版社,精彩文档.。

相关文档
最新文档