无聊做一个无刷电机调试器
fhx12342019/10/30原创 极客DIY计算机电子学 IP:天津

用N年前的 avr Mega16A单片机开发板做了一个无刷电机调试器

IMG_20191030_225932.jpg

IMG_20191030_225911.jpg


无刷视频.mp4 点击下载

#include"iom16v.h"

#include"macros.h"

#define u8 unsigned char

#define u16 unsigned int

//8MHz晶振

 u8  disbuf[4]={1,2,3,4};

 u8  disbit[4]  ={ 0xFE, 0xFD,0xFB,0xF7}; //选通值   

 u8  discode[10]={ 0xC0, 0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };  //段码表

 //u8  str[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xFF };//段码表

 u8  str1[]={0x0e,0x0d,0x0b,0x07};

 u16 data1;//电压转换度数值

 u8 ADC_num_L;

 u8 ADC_num_H;

//************************************************** 

void delay_ms(u16 ms)

{

 u16 i,j;

 for(i=0;i<550;i++)

   for(j=0;j<ms;j++)

      ;

//**************************************************  

void Display(void)

  {  

u8 i;

      for(i=0;i<4;i++)

        {

   PORTB=discode[disbuf[i]];

           PORTA=disbit[i];

           delay_ms(5);

           PORTA=0xff;

  }



//**************************************************

void port_init(void)

{

 DDRB  =0xff;

 PORTB =0xff;

 DDRD  =0xff;

 PORTD =0xff;

 DDRA  =0x0f;

}

//**************************************************

void tim0(void)

{

 TCNT0=0x00;

 OCR0=0xfe;

 TCCR0|=BIT(3)|BIT(2);//256分频,普通模式不与OC口相连,做普通端口BIT(5)|BIT(0)BIT(7)|BIT(4)|

}


//**************************************************

void tim1_pwm(u16 data)//输出PWM

{

 u16 dataL,dataH,i;

 i=(u16)((data*2.778)+500);

 dataH=(u8)(i/256);

 dataL=(u8)(i%256);

 TCNT1H=0x00;

 TCNT1L=0x00;

 OCR1AH=dataH;//TOP值50Hz,0x03e8:2ms,0x01f4:1ms0x01

 OCR1AL=dataL;//0xf4

 OCR1BH=0x03;//TOP值50Hz,0x03e8:2ms,0x01f4:1ms

 OCR1BL=0xe8;

 ICR1H=0x27;//TOP值50Hz

 ICR1L=0x10;

 TCCR1A|=BIT(7)|BIT(5)|BIT(4)|BIT(1);//相位修正8模式

 TCCR1B|=BIT(4)|BIT(1);//8分频

}

//*************************************************

void ADC_init(void)

{

u16 i,j;

//SFIOR|=BIT(6)|BIT(5);//自动触发源选择,连续转换模式

ADMUX|=BIT(6)|BIT(2)|BIT(1)|BIT(0);//基准源5V电源AVCC,输入通道ADC7

ADCSRA|=BIT(7);//自动触发使能位5|BIT(5)



}

//**************************************************

void numble(u16 data)

{

u8 i,k;

//i=(u8)((data-500)*0.36);//ADC值转换度数0--180,只为测试用

i=data;

k=i/100;

PORTB=discode[k];//

PORTA=0xfd;

delay_ms(5);

PORTB=0xff;

delay_ms(2);

k=i%100/10;

PORTB=discode[k];//

PORTA=0xfb;

delay_ms(5);

PORTB=0xff;

delay_ms(2);

k=i%10;

PORTB=discode[k];//

PORTA=0xf7;

delay_ms(5);

PORTB=0xff;

delay_ms(2);

}

//**************************************************

void main(void)

{

u16 i,j;

u8 dataH,dataL,k;

k=0;j=0;

port_init();

for(i=0;i<20;i++)//测试数码管用,忽略

 {

  k++;

  if(k>=4)

   {

     k=0;

     j++;

     if(j>=7)

        j=0;

   }

PORTA=str1[k];

PORTB=discode[k+j];

delay_ms(70);

PORTB=0xff;

delay_ms(30);

}

//tim0();

tim1_pwm(0);//测试用数值,忽略

ADC_init();

i=0;j=0;

while(1)

{

  ADCSRA|=BIT(6);

  data1=(ADCH*256+ADCL);

  i=(u16)((data1*0.4883)+500);

  k=(u8)(data1*0.17578);

  dataH=(u8)(i/256);

  dataL=(u8)(i%256); 

  OCR1AH=dataH;//TOP值50Hz,0x03e8:2ms,0x01f4:1ms0x01

  OCR1AL=dataL;//0xf4

  numble(k);

  delay_ms(20);



}

}

单片机P5端口接电调信号入口。

烧录的exe文件

attachment icon M_16.hex 4.99KB HEX 45次下载


已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}