当前位置: 首页 > news >正文

一个网站的建设需要什么南京500元做网站

一个网站的建设需要什么,南京500元做网站,门户网站如何做谷歌seo,网站建设需要考哪些证【电机控制】基于STC8H1K28的六步换向——方波驱动#xff08;软件篇#xff09; 文章目录 [TOC](文章目录) 前言一、main.c二、GPIO.c三、PWMA.c四、ADC.c五、CMP.c六、Timer.c七、PMSM.c八、参考资料总结 前言 【电机控制】STC8H无感方波驱动—反电动势过零检测六步换向法 … 【电机控制】基于STC8H1K28的六步换向——方波驱动软件篇 文章目录 [TOC](文章目录) 前言一、main.c二、GPIO.c三、PWMA.c四、ADC.c五、CMP.c六、Timer.c七、PMSM.c八、参考资料总结 前言 【电机控制】STC8H无感方波驱动—反电动势过零检测六步换向法 提示以下是本篇文章正文内容下面案例可供参考 一、main.c void main(void) {GPIO_Init(); //IO初始化Uart1_Init(); //串口初始化PWMA_config(); //PWMA初始化ADC_config(); //ADC初始化CMP_config(); //比较器初始化Timer0_config(); // Timer0初始化函数 4ms定时器用于事件处理Timer3_Config(); // Timer3初始化函数 1ms定时器用于换向时间计算Timer4_Config(); // Timer4初始化函数 4us定时器用于计算六步换向PWW_Set 0; //初始PWM设定值TimeOut 0; //超时设定值初始化EA 1; // 打开总中断while (1){Event_Deal();} }二、GPIO.c 配置IO void GPIO_Init(void) {P2n_standard(0xf8);P3n_standard(0xbf);P5n_standard(0x10); }三、PWMA.c u8 PWM_Value; // 决定PWM占空比的值 u8 PWW_Set; //目标PWM设置 void PWMA_config(void) {P_SW2 | 0x80; //SFR enable PWM1 0;PWM1_L 0;PWM2 0;PWM2_L 0;PWM3 0;PWM3_L 0;P1n_push_pull(0x3f); // 预分频寄存器, 分频 Fck_cnt Fck_psc/(PSCR[15:0}1), // 边沿对齐PWM频率 SYSclk/((PSCR1)*(AAR1)), // 中央对齐PWM频率 SYSclk/((PSCR1)*(AAR1)*2).PWMA_PSCR 3; PWMA_DTR 24; // 死区时间配置, n0~127: DTR n T, 0x80 ~(0x80n), n0~63: DTR(64n)*2T, // 0xc0 ~(0xc0n), n0~31: DTR(32n)*8T, 0xE0 ~(0xE0n), n0~31: DTR(32n)*16T,PWMA_ARR 255; // 自动重装载寄存器, 控制PWM周期PWMA_CCER1 0;PWMA_CCER2 0;PWMA_SR1 0;PWMA_SR2 0;PWMA_ENO 0;PWMA_PS 0;PWMA_IER 0; // PWMA_ISR_En 0;PWMA_CCMR1 0x68; // 通道模式配置, PWM模式1, 预装载允许PWMA_CCR1 0; // 比较值, 控制占空比(高电平时钟数)PWMA_CCER1 | 0x05; // 开启比较输出, 高电平有效PWMA_PS | 0; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1, // PWMA_ENO | 0x01; // IO输出允许, bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P // PWMA_IER | 0x02; // 使能中断PWMA_CCMR2 0x68; // 通道模式配置, PWM模式1, 预装载允许PWMA_CCR2 0; // 比较值, 控制占空比(高电平时钟数)PWMA_CCER1 | 0x50; // 开启比较输出, 高电平有效PWMA_PS | (02); // 选择IO, 0:选择P1.2 P1.3, 1:选择P2.2 P2.3, 2:选择P6.2 P6.3, // PWMA_ENO | 0x04; // IO输出允许, bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P // PWMA_IER | 0x04; // 使能中断PWMA_CCMR3 0x68; // 通道模式配置, PWM模式1, 预装载允许PWMA_CCR3 0; // 比较值, 控制占空比(高电平时钟数)PWMA_CCER2 | 0x05; // 开启比较输出, 高电平有效PWMA_PS | (04); // 选择IO, 0:选择P1.4 P1.5, 1:选择P2.4 P2.5, 2:选择P6.4 P6.5, // PWMA_ENO | 0x10; // IO输出允许, bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P // PWMA_IER | 0x08; // 使能中断PWMA_BKR 0x80; // 主输出使能 相当于总开关PWMA_CR1 0x81; // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数, bit71:写自动重装载寄存器缓冲(本周期不会被打扰), 0:直接写自动重装载寄存器本(周期可能会乱掉)PWMA_EGR 0x01; //产生一次更新事件, 清除计数器和与分频计数器, 装载预分频寄存器的值 // PWMA_ISR_En PWMA_IER; //设置标志允许通道1~4中断处理 }// PWMA_PS (06)(04)(02)0; //选择IO, 4项从高到低(从左到右)对应PWM1 PWM2 PWM3 PWM4, 0:选择P1.x, 1:选择P2.x, 2:选择P6.x, // PWMA_PS PWM4N PWM4P PWM3N PWM3P PWM2N PWM2P PWM1N PWM1P // 00 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 // 01 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 // 02 P6.7 P6.6 P6.5 P6.4 P6.3 P6.2 P6.1 P6.0 // 03 P3.3 P3.4 -- -- -- -- -- --四、ADC.c void ADC_config(void) //ADC初始化函数(为了使用ADC输入端做比较器信号, 实际没有启动ADC转换) {P1n_pure_input(0xc0); //设置为高阻输入P0n_pure_input(0x0f); //设置为高阻输入ADC_CONTR 0x80 6; //ADC on channelADCCFG RES_FMT ADC_SPEED;P_SW2 | 0x80; //访问XSFRADCTIM CSSETUP CSHOLD SMPDUTY; } // // 函数: u16 Get_ADC10bitResult(u8 channel)) //channel 0~15 // u16 Get_ADC10bitResult(u8 channel) //channel 0~15 {u8 i;ADC_RES 0;ADC_RESL 0;ADC_CONTR 0x80 | ADC_START | channel; NOP(5); // // while((ADC_CONTR ADC_FLAG) 0) ; //等待ADC结束i 255;while(i ! 0){i--;if((ADC_CONTR ADC_FLAG) ! 0) break; //等待ADC结束}ADC_CONTR ~ADC_FLAG;return ((u16)ADC_RES * 256 (u16)ADC_RESL); }五、CMP.c void CMP_config(void) //比较器初始化程序 {CMPCR1 0x8C; // 1000 1100 打开比较器P3.6作为比较器的反相输入端ADC引脚作为正输入端 CMPCR2 60; //60个时钟滤波 比较结果变化延时周期数, 0~63P3n_pure_input(0x40); //CMP-(P3.6)设置为高阻.P_SW2 | 0x80; //SFR enable // CMPEXCFG | (06); //bit7 bit6: 比较器迟滞输入选择: 0: 0mV, 1: 10mV, 2: 20mV, 3: 30mV // CMPEXCFG | (02); //bit2: 输入负极性选择, 0: 选择P3.6做输入, 1: 选择内部BandGap电压BGv做负输入. // CMPEXCFG | 0; //bit1 bit0: 输入正极性选择, 0: 选择P3.7做输入, 1: 选择P5.0做输入, 2: 选择P5.1做输入, 3: 选择ADC输入(由ADC_CHS[3:0]所选择的ADC输入端做正输入). // CMPEXCFG (06)(02)3; }void CMP_ISR(void) interrupt 21 //比较器中断函数, 检测到反电动势过0事件 {u8 i;CMPCR1 ~0x40; // 需软件清除中断标志位if(XiaoCiCnt 0) //消磁后才检测过0事件, XiaoCiCnt1:需要消磁, 2:正在消磁, 0已经消磁{T4T3M ~(13); // Timer3停止运行if(B_Timer3_OverFlow) //切换时间间隔(Timer3)有溢出{B_Timer3_OverFlow 0;PhaseTime 8000; //换相时间最大8ms, 2212电机12V空转最高速130us切换一相(200RPS 12000RPM), 480mA}else{PhaseTime (((u16)T3H 8) T3L) 1; //单位为1usif(PhaseTime 8000) PhaseTime 8000; //换相时间最大8ms, 2212电机12V空转最高速130us切换一相(200RPS 12000RPM), 480mA}T3H 0; T3L 0;T4T3M | (13); //Timer3开始运行PhaseTimeTmp[TimeIndex] PhaseTime; //保存一次换相时间if(TimeIndex 8) TimeIndex 0; //累加8次for(PhaseTime0, i0; i8; i) PhaseTime PhaseTimeTmp[i]; //求8次换相时间累加和PhaseTime PhaseTime 4; //求8次换相时间的平均值的一半, 即30度电角度if((PhaseTime 40) (PhaseTime 1000)) TimeOut 125; //堵转500ms超时if( PhaseTime 60) PhaseTime - 40; //修正由于滤波电容引起的滞后时间else PhaseTime 20;// PhaseTime 20; //只给20us, 则无滞后修正, 用于检测滤波电容引起的滞后时间T4T3M ~(17); //Timer4停止运行PhaseTime PhaseTime 1; //2个计数1usPhaseTime 0 - PhaseTime;T4H (u8)(PhaseTime 8); //装载30度角延时T4L (u8)PhaseTime;T4T3M | (17); //Timer4开始运行XiaoCiCnt 1; //1:需要消磁, 2:正在消磁, 0已经消磁} }六、Timer.c void Timer0_config(void) //Timer0初始化函数 {Timer0_16bitAutoReload(); // T0工作于16位自动重装Timer0_12T();TH0 (65536UL-MAIN_Fosc/12 / 250) / 256; //4msv4000us4msTL0 (65536UL-MAIN_Fosc/12 / 250) % 256;TR0 1; // 打开定时器0ET0 1;// 允许ET0中断 } void Timer0_ISR(void) interrupt 1 //Timer0中断函数, 20us {B_4ms 1; //4ms定时标志 } // timer3初始化函数 void Timer3_Config(void) {P_SW2 | 0x80; //SFR enable T4T3M 0xf0; //停止计数, 定时模式, 12T模式, 不输出时钟T3H 0;T3L 0;T3T4PIN 0x01; //选择IO, 0x00: T3--P0.4, T3CLKO--P0.5, T4--P0.6, T4CLKO--P0.7; 0x01: T3--P0.0, T3CLKO--P0.1, T4--P0.2, T4CLKO--P0.3;IE2 | (15); //允许中断T4T3M | (13); //开始运行 } // timer3中断函数 void timer3_ISR (void) interrupt TIMER3_VECTOR {B_Timer3_OverFlow 1; //溢出标志 } // timer4初始化函数 void Timer4_Config(void) {P_SW2 | 0x80; //SFR enable T4T3M 0x0f; //停止计数, 定时模式, 12T模式, 不输出时钟T4H 0;T4L 0;T3T4PIN 0x01; //选择IO, 0x00: T3--P0.4, T3CLKO--P0.5, T4--P0.6, T4CLKO--P0.7; 0x01: T3--P0.0, T3CLKO--P0.1, T4--P0.2, T4CLKO--P0.3;IE2 | (16); //允许中断 // T4T3M | (17); //开始运行 } // timer4中断函数 void timer4_ISR (void) interrupt TIMER4_VECTOR {T4T3M ~(17); //Timer4停止运行if(XiaoCiCnt 1) //标记需要消磁. 每次检测到过0事件后第一次中断为30度角延时, 设置消磁延时.{XiaoCiCnt 2; //1:需要消磁, 2:正在消磁, 0已经消磁if(B_RUN) //电机正在运行{if(step 6) step 0;StepMotor();}//消磁时间, 换相后线圈(电感)电流减小到0的过程中, 出现反电动势, 电流越大消磁时间越长, 过0检测要在这个时间之后//100%占空比时施加较重负载, 电机电流上升, 可以示波器看消磁时间.//实际上, 只要在换相后延时几十us才检测过零, 就可以了T4H (u8)((65536UL - 40*2) 8); //装载消磁延时T4L (u8)(65536UL - 40*2);T4T3M | (17); //Timer4开始运行}else if(XiaoCiCnt 2) XiaoCiCnt 0; //1:需要消磁, 2:正在消磁, 0已经消磁 }七、PMSM.c /******************* 强制电机启动函数 ***************************/ void StartMotor(void) {u16 timer,i;CMPCR1 0x8C; // 关比较器中断PWM_Value D_START_PWM10; // 初始占空比, 根据电机特性设置PWMA_CCR1L PWM_Value;PWMA_CCR2L PWM_Value;PWMA_CCR3L PWM_Value;step 0; StepMotor(); Delay_n_ms(100); //Delay_n_ms(250);// 初始位置timer 300; //电机启动值PWM_Value D_START_PWM/1.2; // 根据电机特性设置while(1){for(i0; itimer; i) delay_us(70); //根据电机加速特性, 最高转速等等调整启动加速速度timer - timer /10; //设置加速时间if(step 6) step 0; //设置换向次数StepMotor(); //开启电机换向if(timer 40) return; //剩余启动值} } void StepMotor(void) // 换相序列函数 {switch(step){case 0: // AB PWM1, PWM2_L1PWMA_ENO 0x00; PWM1_L0; PWM3_L0;Delay_500ns();PWMA_ENO 0x01; // 打开A相的高端PWMPWM2_L 1; // 打开B相的低端ADC_CONTR 0x8010; // 选择P0.2作为ADC输入 即C相电压CMPCR1 0x8c 0x10; //比较器下降沿中断break;case 1: // AC PWM1, PWM3_L1PWMA_ENO 0x01; PWM1_L0; PWM2_L0; // 打开A相的高端PWMDelay_500ns();PWM3_L 1; // 打开C相的低端ADC_CONTR 0x809; // 选择P0.1作为ADC输入 即B相电压CMPCR1 0x8c 0x20; //比较器上升沿中断break;case 2: // BC PWM2, PWM3_L1PWMA_ENO 0x00; PWM1_L0; PWM2_L0;Delay_500ns();PWMA_ENO 0x04; // 打开B相的高端PWMPWM3_L 1; // 打开C相的低端ADC_CONTR 0x808; // 选择P0.0作为ADC输入 即A相电压CMPCR1 0x8c 0x10; //比较器下降沿中断break;case 3: // BA PWM2, PWM1_L1PWMA_ENO 0x04; PWM2_L0; PWM3_L0; // 打开B相的高端PWMDelay_500ns();PWM1_L 1; // 打开C相的低端ADC_CONTR 0x8010; // 选择P0.2作为ADC输入 即C相电压CMPCR1 0x8c 0x20; //比较器上升沿中断break;case 4: // CA PWM3, PWM1_L1PWMA_ENO 0x00; PWM2_L0; PWM3_L0;Delay_500ns();PWMA_ENO 0x10; // 打开C相的高端PWMPWM1_L 1; // 打开A相的低端ADC_CONTR 0x809; // 选择P0.1作为ADC输入 即B相电压CMPCR1 0x8c 0x10; //比较器下降沿中断break;case 5: // CB PWM3, PWM2_L1PWMA_ENO 0x10; PWM1_L0; PWM3_L0; // 打开C相的高端PWMDelay_500ns();PWM2_L 1; // 打开B相的低端adc11 ((adc11 *7)3) Get_ADC10bitResult(6);ADC_CONTR 0x808; // 选择P0.0作为ADC输入 即A相电压CMPCR1 0x8c 0x20; //比较器上升沿中断break;default:break;}if(B_start) CMPCR1 0x8C; // 启动时禁止下降沿和上升沿中断 }八、参考资料 【电机控制】六步换向——方波驱动算法篇 总结 本文仅仅简单介绍了【电机控制】基于STC8H1K28的六步换向——方波驱动软件篇评论区欢迎讨论。
http://www.w-s-a.com/news/43739/

相关文章:

  • 提供网站建设服务优化大师哪个好
  • 军队营房基础建设网站哦咪咖网站建设
  • fifa17做任务网站app下载免费安装
  • 网站开发用哪些技术seo是什么意思为什么要做seo
  • 网站会动的页面怎么做的与网站建设有关的招标文件
  • 公司网站如何做seowordpress付费资源
  • 福田做商城网站建设哪家公司便宜点WordPress安装子目录
  • 南京建设交易中心网站wordpress 拼车
  • 上海今天发生的重大新闻5条河南网站seo费用
  • 广东深圳最新情况临安网站seo
  • 华为快速建站女人做春梦网站
  • 建外贸网站费用手机排行榜zol
  • 长治网站制作的网站做网站要什么知识条件
  • discuz 做门户网站wordpress怎么添加图片不显示图片
  • 东营网站建设方案范文百度应用搜索
  • 网站 常见推广js代码放wordpress哪里
  • 靖江网站开发徐州住房和城乡建设局网站
  • 南宁网站建设公司如何为老板打造网站赚钱的wordpress optimizer
  • 做微商好还是开网站好网站网络推广
  • 网站建设岗位所需技能泊头网站优化
  • 企业网站建设是什么网络营销岗位介绍
  • 网站做cdn怎么弄昆明网站seo报价
  • 拖拽网站如何建立微网站
  • 网站网站做代理微信群卖房卡南宁建站模板大全
  • 网络公司怎么优化网站百度快速排名技术培训教程
  • 建e室内设计网 周婷站长工具seo综合查询源码
  • 塔式服务器主机建网站定制美瞳网站建设
  • 网站是先解析后备案吗永久免费网站模板
  • wordpress站点演示php根据ip 跳转网站
  • 东莞市凤岗建设局网站网站开发有哪些职位