黄工无刷电机学习
直播中

姬盼希

8年用户 952经验值
擅长:控制/MCU
私信 关注
[问答]

请问WINAVR编译器是怎样控制直流电机正反转的

请问WINAVR编译器是怎样控制直流电机正反转的?有哪些操作步骤?

回帖(1)

许晓凌

2021-10-15 10:17:04
  *本文及代码参阅彭伟《单片机C语言程序设计实训100例》
  一,打开文件(可以随文下载放置在文档中打开)。
  二,调整原理图大小,适合可视,另存工程文件。(如下图2,3,4所示)
  
  图2
  
  图3
  
  图4
  三,点击Source Code标签。(如下图5所示)
  
  图5
  四,编辑main.c Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a17_正反转可控直流电机 (如下图6所示)
  
  图6
  五,Main.c 代码:
  //-----------------------------------------------------------------
  // 名称: 正反转可控的直流电机
  //-----------------------------------------------------------------
  // 说明: 本例运行时,按下K1直流电机正转,按下K2直流电机反转,
  // 按下K3时停止。 在进行相应操作时,对应LED将被点亮。
  //
  //-----------------------------------------------------------------
  #include “myfunc01.h”
  //-----------------------------------------------------------------
  // 主程序
  //-----------------------------------------------------------------
  int main(void)
  {
  DDRB= 0xFF; PORTB= 0xFF;
  DDRC= 0xFF; PORTC= 0xFF;
  DDRD= 0x00; PORTD= 0xFF;
  LED3_ON();
  while(1) {
  Turner();
  }
  }
  Myfunc01.h
  //******************************************************************************************
  #ifndef MYFUNC01_H
  #define MYFUNC01_H
  #include 《avr/io.h》
  #include 《util/delay.h》
  #define INT8U unsigned char
  #define INT16U unsigned int
  //按键定义
  #define K1_DOWN() ((PIND & _BV(PD1))== 0x00)
  #define K2_DOWN() ((PIND & _BV(PD4))== 0x00)
  #define K3_DOWN() ((PIND & _BV(PD7))== 0x00)
  //LED定义
  #define LED1_ON() (PORTC= 0B11111110)
  #define LED2_ON() (PORTC= 0B11111101)
  #define LED3_ON() (PORTC= 0B11111011)
  //电机控制端A,B操作定义
  #define MA_0() (PORTB &= ~_BV(PB0))
  #define MA_1() (PORTB |= _BV(PB0))
  #define MB_0() (PORTB &= ~_BV(PB1))
  #define MB_1() (PORTB |= _BV(PB1))
  void Turner(void);
  #endif
  六,点击构建工程按钮,编译工程。(如下图7所示)
  
  图7
  七,点击窗口左下方仿真按钮,可见虚拟直流电机运行。 (如下图8,9,10所示)
  
  图8
  
  图9
  
  图10
  八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示)
  
  图11
举报

更多回帖

发帖
×
20
完善资料,
赚取积分