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 设计思想

基于PIC单片机的永磁无刷直流电机控制系统

基于PIC单片机的永磁无刷直流电机控制系统
您的论文得到两院院士关注
中文核心期刊 《微计算机信息》(嵌入式与 S O C )2005 年第 21 卷第 12-2 期
基于 PIC 单片机的永磁无刷直流电机控制系统
PIC Ba s e d DC Mo to r Co n tro l S ys te m
(1.武汉海军工程大学;2. 无锡总装工程兵科研一所)赵 乾 宏 1 张 静 远 1 兰 士 新 2
PIC16F877A 单片机具有 5 个输入/输出端口,特 别需要指出的是单片机内置了两个 CCP 模块,即输入 捕捉、输出比较、脉宽调制模块。本系统就是利用了 PIC 单片机此脉宽调制模块输出脉宽可调的信号,实 现直流电机调速。
2 基 于 PIC16F877A 单 片 机 的 电 机 控 制系统方案
4 结语
本文首次将监控软件+应用服务器+现场总线以 及浏览器+WEB Server+CGI 两种技术融合到智能家庭
技 网关产品中,较好的解决了传统产品的缺陷。通过本
系统在实际家庭智能网络中的运行表明,该系统达到
术 了设计初期的各项要求,能够通过 Internet 实时控制系 创 统中的智能家电并精确的获取家电状态信息。相信在
数据库发送传送参数指令,现场控制系统接到指令后 进行检索,并返回查询结果给虚拟数据库最后显示在 用户监控界面中。当用户发出控制指令时,无论是在 家庭网络内部还是外部,控制指令都可以通过不同的 网络协议可靠地到达被控对象并完成相应的操作,最 后把执行结果(成功或者失败)返回给指令的发出者。 在一般的 C/S 概念中,客户端是廉价的个人 PC,服务 器是价格昂贵、功能强大的专用 Server。但对于本系统 来讲,嵌入式家庭网关是应用服务器和 Web 服务器的 宿主,而嵌入式系统本身资源有限,所以在事物处理 时不应将过多的任务分配给服务器,避免因服务器负 担过重而使整个网络性能下降,要充分发挥客户端计 算机的作用,合理分配网络资源,提高数据处理的效 率。

基于单片机pid算法的直流电机速度控制方法

基于单片机pid算法的直流电机速度控制方法

基于单片机pid算法的直流电机速度控制方法基于单片机PID算法的直流电机速度控制方法是一种常用的技术,其基本原理是通过调节PWM(脉宽调制)信号的占空比来控制电机的输入电压,从而实现电机的速度控制。

以下是基于单片机PID算法的直流电机速度控制方法的基本步骤:1.设定目标速度:首先,需要设定电机的目标速度。

这可以通过按键或其他输入设备来实现。

2.采集实际速度:为了实现精确的控制,需要实时获取电机的实际速度。

这可以通过在电机转轴上安装光电编码器或霍尔传感器来实现,这些传感器可以实时检测电机的转速并将其转换为电信号。

3.计算偏差:单片机通过比较目标速度和实际速度,计算出速度偏差。

如果实际速度小于目标速度,偏差为负;反之,偏差为正。

4.应用PID算法:单片机使用PID算法来处理速度偏差。

PID控制器通过比例、积分和微分三个环节来计算控制量,以尽可能消除偏差。

具体的PID参数(如Kp、Ki、Kd)可以根据实际情况进行调整,以获得最佳的控制效果。

5.生成PWM信号:基于PID控制器的输出,单片机生成PWM信号来调节电机的输入电压。

占空比决定了电机输入电压的大小,进而影响电机的转速。

6.实时调整:在整个控制过程中,单片机不断采集电机的实际速度,计算偏差,并调整PWM信号的占空比,以使电机尽可能接近目标速度。

7.显示和保存数据:为了方便调试和观察,可以通过单片机的显示屏实时显示电机的实际速度和偏差。

此外,也可以将重要的数据保存在单片机的内部或外部存储器中。

8.安全保护:为了防止电机过载或意外事故,单片机应具备安全保护功能。

例如,当电机实际速度超过设定速度一定时间时,单片机应自动切断电源或发出报警信号。

基于单片机PID算法的直流电机速度控制方法具有精度高、稳定性好、适应性强等优点,广泛应用于各种需要精确控制电机速度的场合。

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

PIC单片机控制直流电机转速毕业设计
PIC单片机控制直流 电机转速毕业设计
,a click to unlimited possibilities
汇报人:
目录 /目录
01
PIC单片机介 绍
02
直流电机介绍
03
PIC单片机控 制直流电机转 速的原理
04
系统实现
05
毕业设计总结 与展望
01 PIC单片机介绍
PIC单片机的特点
体积小,功耗低 速度快,处理能力强 集成度高,功能丰富 易于编程,开发周期短 应用广泛,适用于各种控制系统
按照结构分类:有刷直流电机、无刷直流 电机
按照用途分类:驱动直流电机、控制直流 电机、调速直流电机、伺服直流电机
按照转速分类:高速直流电机、低速直流 电机
按照功率分类:大功率直流电机、小功率 直流电机
按照控制方式分类:开环控制直流电机、 闭环控制直流电机
直流电机的应用
Байду номын сангаас
工业自动化: 用于控制生产 线、机械臂等
PIC单片机的作用: 通过控制电枢电 流的大小来控制 转速
调速方法:通过 改变电枢电压或 电枢电流来改变 转速
调速效果:可以 实现平滑、稳定 的调速效果
PIC单片机PWM输出控制直流电机转速
PIC单片机:一种 微控制器,用于控 制各种电子设备
PWM输出:一种 脉冲宽度调制技术, 用于控制直流电机 转速
软件编程与调试
调试工具:串口调试助手 编程环境:Keil uVision5 编程语言:C语言
程序结构:主程序、子程序、 中断服务程序
调试步骤:编译、链接、下 载、运行、调试
调试技巧:断点设置、单步 执行、变量观察、堆栈跟踪
系统测试与优化

高温恶劣环境下基于PIC单片机的直流电机控制系统

高温恶劣环境下基于PIC单片机的直流电机控制系统
低 螺 栓 内 部 的 涡流 损 耗 。
现其温度升 高, 保证了主变压器 的安全稳定运行, 防止 了事故 由于 硅 钢 具 有 良好 的导 磁 性 能 , 最 常 用 的 导 磁材 料 。 是 薄 的发 生 , 而 为 实现 长 周 期 安 全 稳 定 运 行 奠 定 了坚 实 的基 础 。 从 片本身就是减少涡流损失, 加之硅钢片间经过 了绝缘处理 , 更 能减少涡流损耗。因此, 在发热螺栓的附近, 上下节钟罩气 隙 参考文献 : 处填 充 导 磁 块 , 降低 发 热 螺 栓 内的 磁 感 应密 度 , 材 料 可选 【】雷国富. 以 其 l 大型变压器 的结构特点和运行问题【 . M】 西北电力 出 用硅钢片或钢块 2主变压器第 6点发热螺栓采用此种方法
螺杆, 改变 穿过螺栓的磁通 , 使螺栓 的涡流发热减轻。
( ) 用 绝 缘 垫 片 阻 断漏 磁 通 , 低 螺 栓 内部 的涡 流 损 耗 3选 降
[】 4 张程东. 变压器运行 过程 中应注意的问题[ . M】 西北电力 出版
且通过通讯电路模块 可以相互在系统之间或者与 P C机进行
数 据 传 输 和 交 换 。 形 成控 制 网络 。
图 l基 于 PCIF 4 0的 直 流 电机 控 制 系统 结 构 图 I 822
() 2 主变压器挂网运行, 当三相不对称负荷增大时, 变压器
螺杆垫片选用胶木垫、 云母垫 , 使漏磁通回路不经过该螺
直 流 电机 控 制 系 统 ,其 结 构 图 如 图 1 示 。控 制 系 统 主 所
要组成部分包括: I PC单片机, 直流电机控制模块 , 外部事件反 馈模块 ,通讯 电路模块。该系统 可以独立进行外部事件 反应
设 置 ,对 预 定 事 件 和 突 发事 件做 出相 应 的 电机 操 作 反应 。并

基于单片机的直流电机控制

基于单片机的直流电机控制

基于单片机的直流电机控制一、引言二、基本原理1. 直流电机原理直流电机是利用电磁感应的原理进行工作的机电转换设备。

当直流电源施加在电机的电枢上时,电机内部会产生磁场,通过电枢与磁场之间的相互作用形成力矩,从而驱动电机旋转。

电机的转速和方向可以通过改变电枢上的电流方向和大小来控制。

2. 单片机控制原理单片机是一种集成了中央处理器、存储器和输入输出设备的微处理器。

通过编写程序,单片机可以对外部设备进行控制和数据处理。

在直流电机控制中,单片机可以根据输入的信号和程序算法来调整电机的转速和方向。

三、硬件设计1. 单片机选择在直流电机控制中,常用的单片机有STC单片机、ATmega单片机、PIC单片机等。

选择单片机时需要考虑控制精度、计算能力、成本等因素。

2. 电机驱动电路设计电机驱动电路是将单片机输出的信号转换成电机所需的电流和电压的电路。

常用的电机驱动芯片有L298N、TB6612FNG、L9110S等,通过合适的连接方式可以实现电机的正反转和速度控制。

3. 传感器连接为了实现对电机状态的感知和反馈,常常在电机上添加位置传感器或编码器。

这些传感器可以将电机的位置、速度等信息反馈给单片机,从而实现闭环控制。

四、软件编程1. PWM控制脉宽调制(PWM)是控制直流电机速度的一种常用方式。

通过改变占空比,可以控制电机的转速。

在单片机中,通过设置定时器/计数器的计数值和比较寄存器的值,可以实现PWM信号的生成。

2. 方向控制通过控制电机驱动芯片的输入端,可以控制电机的正反转。

根据电机模型和具体的旋转方向,可以设定不同的输入信号来控制电机的转向。

3. 位置闭环控制在一些对电机精确位置控制要求较高的应用中,需要实现位置闭环控制。

通过读取编码器的数据,可以实时反馈电机的位置信息,从而调整电机的控制信号,使其达到精确的位置控制。

五、实例分析以一个小型机械臂为例,我们可以实现对直流电机的三种控制:速度控制、方向控制和位置控制。

单片机控制直流调速系统设计任务书

单片机控制直流调速系统设计任务书

毕业设计(论文)任务书题目:单片机控制直流调速系统设计系别:机电工程系专业:电气自动化技术年级:姓名:指导教师:日期: 年 12 月 23 日毕业设计(论文)任务书毕业设计(论文)任务书毕业设计(论文)任务书5.本毕业设计(论文)课题工作进度计划:起止日期工作内容201 年12 月 14 日~ 12月17日12月23 日~ 12 月25 日201 年3月 28 日~ 4月29日5月 1 日~5 月 20日下发任务书查阅资料完成论文初稿与开题报告和中期检查完成论文定稿和评阅人评阅表,并验收毕业设计教研室审查意见:负责人:年月日系意见:系主任:年月日任务书填写要求1.毕业设计(论文)任务书由指导教师根据各课题的具体情况填写,经教研室负责人审查、系部领导签字后生效。

此任务书应在毕业设计(论文)开始前一周内填好并发给学生;2.任务书内容按教务处统一设计的电子文档标准格式打印,不得随便涂改或潦草书写,禁止打印在其它纸上后剪贴;3.任务书内填写的内容,必须和学生毕业设计(论文)完成的情况相一致,若有变更,应经过系主任签字同意方可重新填写;4.任务书内有关“系别”、“专业”等名称的填写,应写中文全称,不能写数字代码。

学生的“学号”要写全号,不能只写最后2位或1位数字;5.任务书内“主要参考文献”的填写,应按照国标GB 7714—87《文后参考文献著录规则》的要求书写,不能有随意性;6.有关年月日等日期的填写,应当按照国标GB/T 7408—94《数据元和交换格式、信息交换、日期和时间表示法》规定的要求,一律用阿拉伯数字书写。

如“2013年4月2日”或“2013-04-02”。

PIC单片机直流电机控制器的设计和应用

PIC单片机直流电机控制器的设计和应用

PIC单片机直流电机控制器的设计和应用【摘要】本文旨在于通过对现实应用效果的分析,向广大读者传递出PIC单片机直流电机控制器不仅仅能够满足应能指标的设计要求,更可以顺利实现高精度多速的控制。

【关键词】PIC单片机;直流电机控制器一、PIC单片机的技术优势介绍第一,哈佛总线结构。

在设计上这一系列的单片机不仅仅沿用了哈佛体系结构,更尝试了使用哈佛总线结构,这为其在流水作业中各项指令可以更好地执行提供了技术保障;第二,在寻址方式上,其他类型的单片机寻址方式往往在五种以上,这样的优势就是寻找操作数更加方便;第三,在代码压缩率上,PIC系列单片机能够存放的指令多达一千余条,远远超过其他类型的单片机.在节省程序存储空间上,优势更加明显,PIC单片机在引脚上更少,功能更为强大。

除此之外,其能够直接带动LED负载以及结构简单、抗干扰能力强等方面的优势。

二、单片机的直流电机的型号以及特点考察到系统技术的实际情况,此次研究所使用的直流电机选择为maxon集团所生产的高精密电机,型号为A-max32 32rnrn,石墨电刷,其各项性能如表1所示:三、基于PIC单片机技术的直流电机控制器设计与应用(一)PIC单片机直流电机控制器系统结构介绍在直流电机多速控制器系统中,PIC单片机扮演的是整个系统控制核心的角色,利用键盘对每一段的运行参数,诸如键盘输入电路、电源电路、基准电压电路、D/A转换电路、显示电路等进行设计,此次研究中使用数字MR编码器,型号为L,分辨率为1024。

由于在实际运行中单片机I/O口的限制,额外增加了外围硬件确保对于运行过程中的段位进行显示,同时在设定时间、转速以及实际测量转速上做到有效的干预。

该系统运用RS-232串行通信,波特率设定在192000bps,系统的构成方式为4*4行列式键盘,其中包括数字键为0~9、设置键、确认键等等。

(二)基于PIC单片机技术的直流电机控制器的实际应用基于PIC单片机技术的直流电机控制器要想顺利的运行主要包括PIC单片机控制程序以及上位机的参数设置程序两大部分。

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

基于PIC单片机的无刷直流电机控制系统
水利电力 !"#!$%&$'(') *+&,-./&$01$21(3$&)%$4$$$)(
科技风 "#$% 年 & 月
基于 G*H单片机的无刷直流电机控制系统
李小枝
佛山市安尔康姆航空科技有限公司!广东佛山!"#$%&%
摘5要基于 M#C单片机的无刷直流电机控制系统的出现可以让人们对无刷直流电机控制系统的要求得到满足 无刷直流 电机可以在延长电机定期维护修理时间的基础上促进电机使用效率的提升 本文主要从无刷直流电机控制系统方案入手对无 刷直流电机控制系统的硬件设计和软件设计等问题进行了探究
关键词M#C单片机无刷直流电机控制系统系统硬件设计
55随着社会生产技术与人们生活水平的提升#无刷直流电机 已经在航空航天"国防科技和家用电器等多个领域得到了应 用$ 根据单片机技术的发展现状#基于单片机技术和 !EM微处 理器技术的数字系统已经逐步取代了传统的模拟系统$ 基于 单片机的无刷直流电机系统的出现#在节约生产成本的同时# 发挥出了降低电路 MCF板布线难度的作用$
交流电转变为 ($%I直流电$ 直流电压可以被看作是逆变单元 的直流母线电压$ 根据控制器的要求#逆变单元可以将直流母 线电压逆变为交流电压#并将其施加在电机绕组之上$ 整流电 路和功率电路是无刷直流电机控制系统功率电路的重要组成 部分$ 一般情况下#在电流突变至零以后#无刷直流电机绕组 会在电流突变瞬间感受到较大的电压$ 在换相阶段#相电流的 缓慢下降#可以为功率器件和电机提供一定的保护功能$ 出于 保护电机的需要#人们还需要对电机的电流和温度进行检测# 对此人们可以通过电源对地端连接一个取样电阻#并让取样电 阻发挥出电流传感器的作用$

基于PIC单片机的永磁无刷直流电动机控制系统的开发

基于PIC单片机的永磁无刷直流电动机控制系统的开发

基于PIC单片机的永磁无刷直流电动机控制系统的开发
引言
嵌入式系统是指以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、体积、成本、可靠性、功耗严格要求的专用计算机系统。

嵌入式系统是面向应用的,系统的硬件选型和软件开发模式都必须根据具体的应用确定。

永磁无刷直流电动机是电机控制研究领域的热点之一,这与其自身固有的技术优势密切相关:以电子换相取代了有刷直流电动机的机械换相。

从根本上革除了普通有刷直流电动机由于电刷换相带来的火花、噪音、高故障率等一系列问题,同时又使系统的性能能够与普通有刷直流电动机相媲美,因此得到了广泛的应用。

永磁无刷直流电动机的电子换相离不开电机的转子位置信号,传统的方法是采用霍尔器件或其他位置传感器检测位置信号,这使得系统的维护和制造都不方便,并且由于传感器的工作特性不稳定,给系统的安全运行带来了一些隐患。

因此,无位置传感器方案引起了人们的极大兴趣。

本文结合无位置传感器永磁无刷直流电动机控制系统的开发,以Microchip
公司的PIC18F452单片机为主控器件,并采用嵌入式实时操作系统μC/OS-II作为软件开发平台,详细讨论了嵌入式系统的开发模式与流程。

2.系统硬件平台设计
嵌入式系统设计的第一步是结合具体的应用,综合考虑系统对成本、性能、可扩展性、开发周期等各个方面的要求,确定系统的主控器件,并以之为核心搭建系统硬件平台。

无位置传感器永磁无刷直流电动机控制系统的关键问题是位置检测。

目前已经有了很多位置检测方案,其中,反电势法由于简单实用而得以广泛采用。

反。

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

  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].北京:科学出版社,精彩文档.。

相关文档
最新文档