直流无刷电机控制PIC程序(最新)
pic单片机控制直流电机
实用标准文案目录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引脚。
dsPIC30F2010控制直流无刷无传感器电机
AN992作者:Stan D’SouzaMicrochip Technology概述本应用笔记介绍了如何使用dsPIC30F2010数字信号控制器控制无传感器的BLDC 电机。
应用中采用的技术是基于另一Microchip应用笔记:《dsPIC30F在无传感器BLDC 控制中的应用》(AN901)。
本文介绍了如何将dsPIC30F2010器件用于AN901中介绍的硬件和软件,AN901中使用了dsPIC30F6010器件和dsPICDEM™MC1电机控制开发板。
dsPIC30F6010具有80个引脚,拥有144 K字节的闪存程序存储器, 8 K字节的RAM以及数量较多的I/O。
而dsPIC30F2010只有28个引脚,使其I/O数目受到限制。
该款芯片只拥有12 K字节的闪存程序存储器以及512字节RAM的有限资源。
本应用笔记说明了如何对AN901应用笔记中介绍的硬件、软件和用户接口进行修改以利于其代码能够方便地移植到dsPIC30F2010器件。
有关使用dsPIC30F实现BLDC无传感器控制的设计细节,请参阅应用笔记AN901。
由于程序代码实现的功能并未改变,因此AN901中介绍的所有可实现的BLDC控制功能仍旧是相同的。
所需硬件实现本文中介绍的电机控制应用需要使用以下硬件:•PICDEM™ MCLV 开发板(图1)•Hurst DMB0224C10002 CL B 6403 24 V BLDC 电机•24V直流电源用户可以从Microchip购买上述全部硬件或只购买其中某项。
有关订购信息,请浏览Microchip 网站的开发工具部分。
硬件改动图2 给出了无传感器BLDC电机控制应用的简化结构框图。
该图有助于用户自己开发硬件来驱动无传感器的BLDC电机。
PICDEM MCLV 控制板的原理图附录A中给出。
图1:PICDEM™ MCLV 开发板用dsPIC30F2010控制无传感器BLDC电机2005 Microchip Technology Inc.DS00992A_CN第1页AN992DS00992A_CN 第2页 2005 Microchip Technology Inc.图 2:PICDEM™ MCLV 控制板功能除dsPIC30F2010器件外,该框图的基本结构与AN901中完全相同。
基于PIC单片机的直流电机控制器的设计
0引言日本机器人工业协会公布的一份报告指出,到2020年,仅日本服务型机器人的市场需求额就将达到100亿美元,而全球市场可高达1500亿美元以上。
随着现代科学技术的飞速发展和社会的进步,服务机器人将在我们的日常生活中扮演越来越重要的角色[1-2]。
虽然工业机器人伺服控制系统的研究和开发已经成熟,但是它们用于服务机器人仍然存在许多问题,如体积过大、结构封闭、不支持网络通信等,从而导致控制器之间相互孤立,系统升级过程中大量资源浪费[3]。
所以,研究和开发适用于服务机器人的嵌入式、开放式、模块化、网络化的控制器已成为当前的研究热点[4]。
服务机器人一般是用电池驱动的多轴移动机器人,这就要求其控制系统具有耗电量小和接线少的特点[5]。
PIC 单片机是美国Microchip 公司生产的8位微处理器,但是它的速度与功能却比现在一些普通8位的51单片机强很多。
PIC 单片机的体积小、功耗低,而且内部集成了多种外围电路,使设计更加方便,无需在单片机的设计中再添加一些外围电路,容易形成内嵌式控制系统[6]。
不少学者开始用PIC 单片机来控制电机[7-8],文献[8]提出了一种用PIC 作为伺服电机控制器,通过串口通信的方法实现了耗电量小和接线少的要求。
服务机器人是与人接触、与人共存的机器人,这就要求其控制模式能随着外部环境的变化而改变。
而现有的大多数伺服电机控制器一旦设定某种控制模式(如位置控制),在控制过程中是无法改变控制模式的。
本文提出了一种位置、速度、电流3种控制模式随时可变的伺服控制器。
它不同于传统的固定控制模式,使机器人各个关节能根据不同的外部环境采用不同的控制模式。
由于该伺服控制系统具有耗电量小、连接线少、价格低廉、控制轴数扩展容易、不受计算机操作系统限制和具有通用性等优点,特别适合电池驱动的多轴服务机器人的应用。
1设计思想1.1控制原理基于PIC 芯片的电机控制原理如图1所示,控制模式包括位置控制、速度控制和电流控制。
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在现代工业控制系统中,直流无刷电机的应用越来越广泛。
BLDC控制PIC程序
另一完整版#include "DSP281x_Device.h"#include "DSP281x_Examples.h"//#include "DSP281x_Globalprototypes.h"#include "DSP281x_Device.h"#include "DSP281x_Examples.h"void InitPieCtrl(void);void init_7219(void);void InitSysCtrl(void);void InitPieVectTable(void);void pdelay(void);void delay(void);interrupt void eva_capint1_isr(void);interrupt void eva_capint2_isr(void);interrupt void eva_timer1_isr(void);extern void DSP28x_usDelay(Uint32 Count);unsigned s=500;unsigned state;unsigned i,j;int32 x3=0,speed1,speed2=0;//数组供显示用unsigned K;unsigned y=0;int32 x1=0,x2=0;Uint16 counter=0;//===========PI参数===========float Kpspeed=10,Kispeed=0.01,Kcspeed=0.0046;int Nmin=0,Nmax=1500; //float RKspeed=0,Uspeed=0.0; //int Nref=300,N=0,Iref=0;int Espeed=0;//===============速度PID====================//void SPEED_PI(void) //{//Xispeed:速度调节器积分累积量Espeed=Nref-N;Uspeed=Kpspeed*Espeed+RKspeed;if(Uspeed<0){if((Nmin-Uspeed)>=0)Iref=Nmin;elseIref=(int)Uspeed;}else{if(Nmax-Uspeed<0)Iref=Nmax;elseIref=(int)Uspeed;}RKspeed=Kcspeed*(Iref-(int)Uspeed)+Espeed*Kispeed+RKspeed; Iref=1500-Iref;}//=============增调速=====================//void tiaosujian(void){if(Nref<=0){Nref=0;}else{Nref=Nref-1;}}//=============减调速=====================//void tiaosuzeng(void){if(Nref>=1500){Nref=1500;}else{Nref=Nref+1;}}//=============延时程序=====================//void pdelay(void){for(j=0;j<100;j++){ for (i = 0; i < 5; i++);}}//=============SPI初始化====================//void InitSpi(void){SpiaRegs.SPICCR.all=0x000F; //复位SPI模块,SPICLK 信号上升沿时,数据输出//单个移位序列周期移入,移出的位数为16SpiaRegs.SPICTL.all=0x000E; //SPICLK 信号延时半个周期,主模式,使能发送SpiaRegs.SPIBRR=120;SpiaRegs.SPICCR.bit.SPISWRESET=1; //SPI准备好发送或接收下一个字符//=============MAX7219 Init====================== GpioDataRegs.GPFCLEAR.bit.GPIOF3=1;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;SpiaRegs.SPITXBUF=0x09FF;while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1){};GpioDataRegs.GPFSET.bit.GPIOF3=1;GpioDataRegs.GPFCLEAR.bit.GPIOF3=1;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;SpiaRegs.SPITXBUF=0x0A0A;while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1){};GpioDataRegs.GPFSET.bit.GPIOF3=1;GpioDataRegs.GPFCLEAR.bit.GPIOF3=1;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;SpiaRegs.SPITXBUF=0x0B03;while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1){};GpioDataRegs.GPFSET.bit.GPIOF3=1;GpioDataRegs.GPFCLEAR.bit.GPIOF3=1;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;SpiaRegs.SPITXBUF=0x0C01;while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1){};GpioDataRegs.GPFSET.bit.GPIOF3=1;GpioDataRegs.GPFCLEAR.bit.GPIOF3=1;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;SpiaRegs.SPITXBUF=0x0F00;while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1){};GpioDataRegs.GPFSET.bit.GPIOF3=1;}//===========显示子程序=====================//void XianShi(long int m){Uint16 dizhi[4]={0x0100,0x0200,0x0300,0x0400};Uint16 shu[4];int i;for(i=3;i>=0;i--){shu[i]=m%10;m=m/10;GpioDataRegs.GPFCLEAR.bit.GPIOF3=1;SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;SpiaRegs.SPITXBUF=dizhi[i]|shu[i];while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1){};GpioDataRegs.GPFSET.bit.GPIOF3=1;}}//==============EV A初始化子程序=============/void EV A_Timer1(){//EvaRegs.GPTCONA.all=0;EvaRegs.T1CNT=0x0000; //T1CNT(定时器1的计数寄存器)EvaRegs.T1PR=1500;EvaRegs.ACTRA.all = 0x0000; //比较方式寄存器,设置比较器输出引脚的方式EvaRegs.CMPR1 = 500; //全比较寄存器EvaRegs.CMPR2 = 500;EvaRegs.T2CNT=0x0000;EvaRegs.T2PR=0xFFFF;EvaRegs.T2CON.all=0x1740;EvaRegs.EV AIMRA.bit.T1UFINT=1; //EV AIMRA(EV A的中断屏蔽寄存器A).T1PINT(通用定时器1的周期中断使能)EvaRegs.EV AIFRA.bit.T1UFINT=1;//EV AIFRA(EV A的中断标志寄存器.T1PINT(通用定时器1的周期中断标志)//写1清除定时器1的周期中断标志CONA.all = 0x82FF; //比较器控制寄存器EvaRegs.T1CON.all=0x1002;//T1CON=000 10 000 0100 0000EvaRegs.T1CON.bit.TMODE=01;EvaRegs.T1CON.bit.TENABLE=1;EvaRegs.CAPCONA.all = 0;//EvaRegs.CAPCONA.all=0xA0F0;EvaRegs.CAPCONA.bit.CAP12EN = 1; //使能捕获单元1和2EvaRegs.CAPCONA.bit.CAP1EDGE = 3; //选用两边沿EvaRegs.CAPCONA.bit.CAP2EDGE = 3; //选用上两边沿EvaRegs.CAPCONA.bit.CAP12TSEL = 0; //选择定时器2*/EvaRegs.CAPFIFOA.bit.CAP1FIFO = 0; //状态寄存器清零EvaRegs.CAPFIFOA.bit.CAP2FIFO = 0; //状态寄存器清零EvaRegs.EV AIMRC.bit.CAP1INT = 1; //捕获1中断屏蔽位使能EvaRegs.EV AIFRC.bit.CAP1INT = 1; //复位标志位EvaRegs.EV AIMRC.bit.CAP2INT = 1; //捕获1中断屏蔽位使能EvaRegs.EV AIFRC.bit.CAP2INT = 1; //复位标志位}//===============主程序=====================//void main(void){Uint16 num=0;DINT; //关总中断IER=0x0000; //禁止使能IFR=0x0000;InitSysCtrl(); //系统初始化InitGpio();InitSpi();EALLOW;SysCtrlRegs.PLLCR.all=0x0002;SysCtrlRegs.HISPCP.all=0x0000; //HISPCP(高速外设时钟预定标寄存器)//bit0~2=011:高速时钟的频率=SYSCKLOUT/6//高速时钟的频率=25M EDIS;EALLOW; //关闭寄存器保护GpioMuxRegs.GPAMUX.all=0x030F;//将A0-A3设成pwm 口,将A8、A9设成CAP口,将A4、A5设成IO口,做测试用,A10为IO口按键做保护用GpioMuxRegs.GPADIR.bit.GPIOA4=1;GpioMuxRegs.GPADIR.bit.GPIOA5=1;GpioMuxRegs.GPADIR.bit.GPIOA10=0;GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=0;GpioMuxRegs.GPBMUX.bit.PWM8_GPIOB1=0;GpioMuxRegs.GPBDIR.bit.GPIOB0=0;GpioMuxRegs.GPBDIR.bit.GPIOB1=0;GpioMuxRegs.GPFMUX.all=0x000f;GpioMuxRegs.GPFMUX.bit.SPICLKA_GPIOF2=1; //选择复用SPISIMO,SPISTE,SPICLKGpioMuxRegs.GPFMUX.bit.SPISIMOA_GPIOF0=1;// GpioMuxRegs.GPFMUX.bit.SPISTEA_GPIOF3=1;GpioMuxRegs.GPFMUX.bit.SPISTEA_GPIOF3=0;GpioMuxRegs.GPFDIR.bit.GPIOF3=1;EDIS;EV A_Timer1();InitPieCtrl(); //初始化PIE控制寄存器InitPieVectTable();//重新映射定时器1的比较中断入口EALLOW;PieVectTable.CAPINT1 = &eva_capint1_isr; //中断使能PieVectTable.CAPINT2 = &eva_capint2_isr; //中断使能PieVectTable.T1UFINT = &eva_timer1_isr; //定时器下溢中断使能EDIS;//使能T1下溢中断:PIE-组2,中断6,使能捕获中断PieCtrlRegs.PIEIER2.bit.INTx6 = 1;PieCtrlRegs.PIEIER3.bit.INTx5 = 1;PieCtrlRegs.PIEIER3.bit.INTx6 = 1;//使能CPU INT2,GP-Timer1的下溢中断连接到该中断,使能捕获中断IER = 0x0006;//全局中断使能,并使能具有更高优先级的实时调试方式EINT; //使能全局中断INTMERTM;//使能全局实时中断DBGMwhile(1){if(GpioDataRegs.GPBDAT.bit.GPIOB0==1){tiaosuzeng();}asm(" nop");asm(" nop");if(GpioDataRegs.GPBDAT.bit.GPIOB1==1){tiaosujian();}asm(" nop");asm(" nop");InitSpi();XianShi(N);num++;if(num==9999){num=0;}DELAY_US(80000L);InitSpi();}}//============捕获1 中断处理================// interrupt void eva_capint1_isr(void){// asm(" RPT #150 || NOP"); //空操作延时GpioMuxRegs.GPAMUX.all = 0x000F;GpioMuxRegs.GPADIR.bit.GPIOA8=0;GpioMuxRegs.GPADIR.bit.GPIOA9=0;if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==0){ state=0;}if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==1){state=3;}if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==0){state=2;}if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==1){state=1;}// x2=EvaRegs.T2CNT;x2=counter;x3=(long int)(x2-x1);if(x3<0){x3+=65536;}speed1=8330/x3;N=speed1*6;x1=x2;GpioMuxRegs.GPAMUX.all = 0x030F;EvaRegs.EV AIFRC.bit.CAP1INT = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; }//============捕获2中断处理================// interrupt void eva_capint2_isr(void){//asm(" nop");GpioMuxRegs.GPAMUX.all = 0x000F;GpioMuxRegs.GPADIR.bit.GPIOA8=0;GpioMuxRegs.GPADIR.bit.GPIOA9=0;if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==0){state=2;}if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==1){state=1;}if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==0){ state=0;}if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==1){state=3;}GpioMuxRegs.GPAMUX.all = 0x030F;EvaRegs.EV AIFRC.bit.CAP2INT = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}//============T1下溢中断处理================//interrupt void eva_timer1_isr(void){counter++;SPEED_PI();EvaRegs.CMPR1 = Iref;EvaRegs.CMPR2 = Iref;if(GpioDataRegs.GPADAT.bit.GPIOA10==1){ if(state==0){EvaRegs.ACTRA.all = 0x000A;GpioDataRegs.GPADAT.bit.GPIOA4=1;GpioDataRegs.GPADAT.bit.GPIOA5=1;}if( state==3){EvaRegs.ACTRA.all = 0x00A0;GpioDataRegs.GPADAT.bit.GPIOA4 = 0;GpioDataRegs.GPADAT.bit.GPIOA5 = 0;}if( state==2){EvaRegs.ACTRA.all = 0x0082;GpioDataRegs.GPADAT.bit.GPIOA4=0;GpioDataRegs.GPADAT.bit.GPIOA5=1;}if( state==1){EvaRegs.ACTRA.all = 0x0028;GpioDataRegs.GPADAT.bit.GPIOA4=1;GpioDataRegs.GPADAT.bit.GPIOA5=0;}} //通过以上不同的组合,可以改变I/O口的状态,//GpioDataRegs.GPEDAT.all查看I/O口状态EvaRegs.EV AIFRA.bit.T1UFINT=1;PieCtrlRegs.PIEACK.all=PIEACK_GROUP2; //#define PIEACK_GROUP2 0x0002;}。
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位单片机产品,可以实现在线调试和在线编程。
基于dsPIC单片机的无刷直流电机控制系统
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年
J
清时值清断数 l 定器 ,中计值
自带 保护 功能 , 护 引脚 为S 当其 为高 电平 保 D, 时, 封锁I 2 的输出, 10 R 1 通过 采样主电路中的
图 4 I 0 中断服 务 流程 NT 的
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单片机控制直流电机
目录1 总体设计框架 (3)2 硬件电路设计 (4)2.1 芯片介绍 (4)2.2 驱动电路 (9)2.3 按键控制电路 (10)3程序编写 (10)3.1 工作原理 (10)3.2 程序书写过程 (12)参考资料 (16)直流电机驱动Abstract 摘要:本文主要内容是利用PIC18F452单片机来控制直流电机,通过L293NE来驱动电机,通过按键来使其正转,反转。
Keywords 关键词:直流电机,PWM,L293NE1总体设计框架硬件电路利用驱动芯片L293D来驱动直流电机,按键则是单独引出。
如图1所示。
软件则是C语言编程。
图1硬件设计框2硬件电路设计2.1 芯片介绍首先,总体说明硬件电路设计,如图2 原理图,图3 PCB图以及图4板子的图所示。
三个输入信号,如图分别为RD4,RD5,RD6连上光耦的2脚,然后通过光耦的4脚引入L293D的使能引脚(12EN)以及输入引脚(1A,2A),然后L293D的输出引脚(1Y,2Y)通过H-桥型控制电路与直流电机连接。
图2 直流电机控制部分原理图图3直流电机控制部分PCB图图4 成品板其中红线圈表示直流电机控制部分。
下面详细介绍各个芯片。
1、PIC18F452PIC18F452与PIC18F4580外部端口以及内部存储器是相同的。
上图的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)。
直流无刷电机 pid调速 毕业设计_基于单片机和PID算法的直流电机调速设计(原创)
直流无刷电机 pid调速毕业设计_基于单片机和PID算法的直流电机调速设计(原创)导读:就爱阅读网友为您分享以下“毕业设计_基于单片机和PID算法的直流电机调速设计(原创)”的资讯,希望对您有所帮助,感谢您对92to 的支持!摘要在运动控制系统中,电机转速控制占有至关重要的作用,其控制算法和手段有很多,模拟PID控制是最早发展起来的控制策略之一,长期以来形成了典型的结构,并且参数整定方便,能够满足一般控制的要求,但由于在模拟PID控制系统中,参数一旦整定好后,在整个控制过程中都是固定不变的,而在实际中,由于现场的系统参数、温度等条件发生变化,使系统很难达到最佳的控制效果,因此采用模拟PID控制器难以获得满意的控制效果。
随着计算机技术与智能控制理论的发展,数字PID技术渐渐发展起来,它不仅能够实现模拟PID所完成的控制任务,而且具备控制算法灵活、可靠性高等优点,应用面越来越广。
本设计以上面提到的数字PID为基本控制算法,以AT89S51单片机为控制核心,产生占空比受数字PID算法控制的PWM脉冲实现对直流电机转速的控制。
同时利用光电传感器将电机速度转换成脉冲频率反馈到单片机中,实现转速闭环控制,达到转速无静差调节的目的。
在系统中采数码管显示器作为显示部件,通过2×2键盘设置P、I、D、V四个参数,启动后可以通过显示部件了解电机当前的转速。
该系统控制精度高,具有很强的抗干扰能力。
关键词:数字PID;PWM脉冲;占空比;无静差调节AbstractIn the motion control system,the control of electromotor's rotate speed is of great importance,there are a lot of speed control arithmetics andmethods ,the analog PID control is one of the earliest developed control policies which has formed typical structure ,its parametric setting is convenient and it's easy to meet normal control's demand,but as the whole control process is fixed once the parameter has been set while practically the changes of those conditions like the system parameters and temperature of the environment prohibit the system from reaching its best control effect,so the analog PID controller barely has satisfied effect.With the development of computer technology and intelligent control theory ,the digital PID technology is thriving which can achieve the analog PID's control tasks and consists of many advantages like flexible control arithmetics and high reliability,it is widely used now.This design is based on the digital PID mentioned above as basic control arithmetic and AT89S51 SCM as control core,the system produces PWM impulse whose duty ratio is controlled by digital PID arithmetic to make sure the running of direct current machine's rotate speed.Meanwhile,the design uses photoelectric sensor to transduce the electromotor speed into impulse frequencyand feed it back to SCM,this process implements rotate speed's closed loop control to attain the purpose of rotate speed's astatic modulation.In this system, the 128×64LCD is used as display unit , the 4×4 keyboard sets those four parameters P、I、D、V and obverse and reverse control,after starting up,the display unit shows the electromotor's current rotate speed and runtime.The system has great control precision and anti-jamming capability.Keywords:digital PID;PWM impulse;dutyfactor;astatic modulation前言21世纪,科学技术日新月异,科技的进步带动了控制技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。
基于DSPIC33FJ32MC204无刷直流电机驱动控制系统的研究
基于DSPIC33FJ32MC204无刷直流电机驱动控制系统的研究无刷直流电机(BLDC)是一种齿轮和刷子的共同驱动的直流电机。
相比传统的直流电机,BLDC电机具有更高的效率、更低的噪音和更长的寿命。
因此,BLDC电机在现代工业和家电领域得到了广泛的应用。
DSPIC33FJ32MC204是一种高性能的数字信号处理器(DSP),具有高速运算能力和丰富的外设接口,非常适合用于控制BLDC电机。
基于DSPIC33FJ32MC204的BLDC电机驱动控制系统可以提供精确的速度和位置控制,适用于各种工业和家电应用。
BLDC电机驱动控制系统的核心是通过PWM波形控制电机的转速和转向。
DSPIC33FJ32MC204可以生成高精度的PWM波形信号,并通过引脚输出给电机驱动电路。
同时,DSPIC33FJ32MC204还可以读取电机的位置反馈信号,实现闭环控制。
在研究中,首先需要对BLDC电机的原理和特性进行深入了解。
其次,需要对DSPIC33FJ32MC204的开发环境进行配置和学习,包括编写程序、调试和仿真等。
然后,可以设计BLDC电机驱动控制系统的硬件电路,包括电机驱动电路和信号采集电路。
最后,基于DSPIC33FJ32MC204开发控制程序,并进行实验验证。
在实验中,可以通过调整PWM波形的占空比和频率来控制电机的转速。
同时,可以通过读取位置反馈信号,实时调整PWM波形的相位,实现电机的闭环控制。
通过对转速和位置的精确控制,可以提高电机的效率和响应速度。
总结起来,基于DSPIC33FJ32MC204的BLDC电机驱动控制系统的研究可以提供一种高效、低噪音和可靠的电机驱动解决方案。
该系统适用于各种工业和家电应用,并具备很大的应用前景。
对直流无刷电机的pid控制
PID闭环速度调节器采用比例积分微分控制闭环速度调节器采用比例积分微分控制(简称PID控制),其输出是输入的比例、积分和微分的函数。
PID调节器控制结构简单,参数容易整定,不必求出被控对象的数学模型,因此PID 调节器得到了广泛的应用。
PID调节器虽然易于使用,但在设计、调试无刷直流电机控制器的过程中应注意:PID调节器易受干扰、采样精度的影响,且受数字量上下限的影响易产生上下限积分饱和而失去调节作用。
所以,在不影响控制精度的前提下对PID控制算法加以改进,关系到整个无刷直流电机控制器设计的成败。
2速度设定值和电机转速的获取为在单片机中实现PID调节,需要得到电机速度设定值(通过A/D变换器)和电机的实际转速,这需要通过精心的设计才能完成。
无刷直流电机的实际转速可通过测量转子位置传感器(通常是霍尔传感器)信号得到,在电机转动过程中,通过霍尔传感器可以得到如图2所示的周期信号。
由图2可知,电机每转一圈,每一相霍尔传感器产生2个周期的方波,且其周期与电机转速成反比,因此可以利用霍尔传感器信号得到电机的实际转速。
为尽可能缩短一次速度采样的时间,可测得任意一相霍尔传感器的一个正脉冲的宽度,则电机的实际转速为:但由于利用霍尔传感器信号测速,所以测量电机转速时的采样周期是变化的,低速时采样周期要长些,这影响了PID 调节器的输出,导致电机低速时的动态特性变差。
解决的办法是将三相霍尔传感器信号相“与”,产生3倍于一相霍尔传感器信号频率的倍频信号,这样可缩短一次速度采样的时间,但得增加额外的硬件开销。
直接利用霍尔传感器信号测速虽然方便易行,但这种测速方法对霍尔传感器在电机定子圆周上的定位有较严格的要求,当霍尔传感器在电机定子圆周上定位有误差时,相邻2个正脉冲的宽度不一致,会导致较大的测速误差,影响PID调节器的调节性能。
若对测速精度要求较高时,可采用增量式光电码盘,但同样会增加了电路的复杂性和硬件的开销。
电机速度设定值可以通过一定范围内的电压来表示。
基于dsPIC30F4011无刷直流电机的控制
基于dsPIC30F4011无刷直流电机的控制摘要:采用Microchip公司电机的数字信号控制器(Digital Signal Controller,DSC)dsPIC30F4011,完成了无刷直流电机软硬件控制方案。
针对所设计的控制方案对控制系统的软、硬件设计作了详细论述。
在完成硬件电路整体设计的基础上,着重讨论了几个主要模块的电路设计。
软件部分采用模块化设计思想,编制了各个模块的流程图。
关键词:无刷直流电机;DSC;dsPIC30F40110 引言无刷直流电动机(BLDCM)实际上是以电子换向代替机械换向的直流电动机,既具有交流电动机结构简单、运行可靠、维护方便等一系列优点,又保持了直流电动机的优良特性,具有较好的起动和调速性能,无刷直流电机可以从根本上克服一般有刷直流电动机易于产生换向火花的弊病,故在当今国防和国民经济的各个领域,如医疗器械、仪器仪表、化工、轻纺、家电和航空航天等方面的应用日益普及。
Microchip公司的16位dsPIC DSC兼容了单片机和DSP芯片这两类产品的优点,本设计中以dsPIC30F4011为主控芯片,以无刷直流电机为被控对象,对无刷直流电机的控制与应用进行了研究。
1 dsPIC30F4011功能简介Microchip公司推出的DSC系列,为嵌入式系统设计提供了合适的单芯片、单指令的解决方案。
其中16位dsPIC30F4011芯片是专为电动机控制应用而优化的单片机控制器,不仅具备强大高速的运算处理能力,而且在片内集成了丰富的电动机控制外围部件,这就使得整个数字控制系统的硬件设计比较简洁。
dsPIC30F4011有以下特点:dsPIC30F4011有40管脚,具有脉宽调制(PWM)模块和一个500 KSPS的10位模数转换器,优化的C编译器指令系统,灵活的寻址方式,48K字节片上FLASH程序存储器(16K指令字),16位输入捕捉功能,16位比较/PWM输出功能,3线SPI模块(支持4个帧模式),两个UART模块带有FIF0缓冲,一个CAN2.0模块,是控制无刷直流电机的理想之选。
直流无刷电机控制器程序流程图
基于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 服务器的 宿主,而嵌入式系统本身资源有限,所以在事物处理 时不应将过多的任务分配给服务器,避免因服务器负 担过重而使整个网络性能下降,要充分发挥客户端计 算机的作用,合理分配网络资源,提高数据处理的效 率。
直流无刷电机的模糊PI速度控制
for tun ing the KIS param eter
ec ( t) e ( t)
NL NM N S ZO PS PM PL
NL
NM
NL NM NL NM PS
NS
NL NM N S ZO
ZO NL NM N S ZO PS PM PL
PS
ZO N S N S PL
PM
PS PM PL
PL
PM PL
第 2期 张会林 ,胡爱军 ,李 静 ,等 :直流无刷电机的模糊 P I速度控制
53
靠 、稳定 ,但它难以克服负载 、模型参数等发生大范围变化时以及非线性因素的影响. 因而无法满足高性 能 、高精度场合的要求.
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 引言当今,自动化控制系统已经在各行各业得到了广泛的应用和发展,而直流调速控制作为电气传动的主流在现代化生产中起着主要作用,无论是在工农业生产、交通运输、国防、航天航空、医疗卫生、商务与办公设备、还是在日常生活中的家用电器都大量使用着各式各样的电气传动系统,其中许多系统有调速的要求:如车辆、电梯、机床、造纸机械等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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;}。