返回列表 发帖
回复 25# admin


    PCB布局.rar (42.71 KB)

TOP

上面人机界面的PCB板,PDF格式下载,查看如下:
INTERFACE.pdf (79.59 KB)

TOP

人机界面的原理图、封装库、PCB板,请参考。
界面.ddb (1.55 MB)

TOP

学习了。

TOP

经过十几天画pcb板,终与觉的自己能够画硬件电路了,很期待能够参与进来。

TOP

回复 23# 小叶子


    引脚还是有问题啊

TOP

基本已经修正,马上出下面控制板的PCB图.

控制器的原理图和PCB板图,请大家找问题,提意见。

控制器.ddb (602 KB)

TOP

复位键在面板和主板之间么?这样的话,在调试的时候复位键会不会被面板挡住了按不到?

TOP

这个是问题,包括程序下载的时候,不太方便。调试时艰苦点。

TOP

步进电机控制器PCB图.pdf (88.1 KB)

TOP

期待中。。。。。。。。。。。

TOP

对于stm32系列的代码编写
我们用的是这个2.0的库

STM32固件库V2.0(适合参考).pdf (2.79 MB)

TOP

本帖最后由 panfeng881112 于 2010-10-31 20:07 编辑

这是控制器的9个灯的控制宏定义(未调试版
/* 9个led灯 */
#define CH2_ON                GPIO_ResetBits(GPIOA, GPIO_Pin_12)         //PA口输出低电平     led灯 CH2点亮
#define CH2_OFF                GPIO_SetBits(GPIOA, GPIO_Pin_12)           //PA口输出高电平     led灯 CH2熄灭
#define YH2_ON                GPIO_ResetBits(GPIOA, GPIO_Pin_11)
#define YH2_OFF                GPIO_SetBits(GPIOCA GPIO_Pin_11)
#define CH1_ON                GPIO_ResetBits(GPIOA, GPIO_Pin_10)
#define CH1_OFF                GPIO_SetBits(GPIOA, GPIO_Pin_10)
#define YH1_ON                GPIO_ResetBits(GPIOA, GPIO_Pin_9)
#define YH1_OFF                GPIO_SetBits(GPIOA, GPIO_Pin_9)
#define HND_ON                GPIO_ResetBits(GPIOC, GPIO_Pin_9)
#define HND_OFF                GPIO_SetBits(GPIOC,GPIO_Pin_9)
#define AUT_ON                GPIO_ResetBits(GPIOC, GPIO_Pin_8)
#define AUT_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_8)
#define DC_ON                GPIO_ResetBits(GPIOC, GPIO_Pin_2)
#define DC_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_2)
#define INA_ON                GPIO_ResetBits(GPIOC, GPIO_Pin_3)
#define INA_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_3)
#define OUT_ON                GPIO_ResetBits(GPIOC, GPIO_Pin_4)
#define OUT_OFF                GPIO_SetBits(GPIOC, GPIO_Pin_4)

就是控制9个led灯对应的io口的高低电平从而控制led灯是否点亮
我们的控制器这里是低电平是点亮led灯

TOP

本帖最后由 panfeng881112 于 2010-10-31 20:08 编辑

这个是获取5路按键信息的宏定义(未调试版

/* 5路按键 */
#define GET_SET  (!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13))   //读PB13口的电平  再取反赋给GET_SET  
#define GET_ENT  (!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14))
#define GET_LFL  (!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15))   
#define GET_DWN  (!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_8))
#define GET_UP  (!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_9))
当GET_*的值是1时,说明相对应的按键被按下了;为0时,相对应按键没有被按下。

TOP

本帖最后由 panfeng881112 于 2010-10-31 20:43 编辑

下面是数码管的相关宏定义(未调试
/*数码管亮灭使能 */
#define CHOICE1_1_ON GPIO_ResetBits(GPIOD, GPIO_Pin_3)
#define CHOICE1_2_ON GPIO_ResetBits(GPIOD, GPIO_Pin_4)
#define CHOICE1_3_ON GPIO_ResetBits(GPIOD, GPIO_Pin_5)
#define CHOICE1_4_ON GPIO_ResetBits(GPIOD, GPIO_Pin_6)
#define CHOICE1_5_ON GPIO_ResetBits(GPIOD, GPIO_Pin_7)
#define CHOICE1_6_ON GPIO_ResetBits(GPIOB, GPIO_Pin_5)
#define CHOICE1_7_ON GPIO_ResetBits(GPIOB, GPIO_Pin_9)
#define CHOICE1_8_ON GPIO_ResetBits(GPIOE, GPIO_Pin_0)

#define CHOICE2_1_ON GPIO_ResetBits(GPIOE, GPIO_Pin_4)
#define CHOICE2_2_ON GPIO_ResetBits(GPIOE, GPIO_Pin_3)
#define CHOICE2_3_ON GPIO_ResetBits(GPIOE, GPIO_Pin_2)
#define CHOICE2_4_ON GPIO_ResetBits(GPIOE, GPIO_Pin_1)
#define CHOICE2_5_ON GPIO_ResetBits(GPIOC, GPIO_Pin_1)
#define CHOICE2_6_ON GPIO_ResetBits(GPIOC, GPIO_Pin_0)
#define CHOICE2_7_ON GPIO_ResetBits(GPIOE, GPIO_Pin_6)
#define CHOICE2_8_ON GPIO_ResetBits(GPIOE, GPIO_Pin_5)

#define CHOICE1_1_OFF GPIO_SetBits(GPIOD, GPIO_Pin_3)
#define CHOICE1_2_OFF GPIO_SetBits(GPIOD, GPIO_Pin_4)
#define CHOICE1_3_OFF GPIO_SetBits(GPIOD, GPIO_Pin_5)
#define CHOICE1_4_OFF GPIO_SetBits(GPIOD, GPIO_Pin_6)
#define CHOICE1_5_OFF GPIO_SetBits(GPIOD, GPIO_Pin_7)
#define CHOICE1_6_OFF GPIO_SetBits(GPIOB, GPIO_Pin_5)
#define CHOICE1_7_OFF GPIO_SetBits(GPIOB, GPIO_Pin_9)
#define CHOICE1_8_OFF GPIO_SetBits(GPIOE, GPIO_Pin_0)

#define CHOICE2_1_OFF GPIO_SetBits(GPIOE, GPIO_Pin_4)
#define CHOICE2_2_OFF GPIO_SetBits(GPIOE, GPIO_Pin_3)
#define CHOICE2_3_OFF GPIO_SetBits(GPIOE, GPIO_Pin_2)
#define CHOICE2_4_OFF GPIO_SetBits(GPIOE, GPIO_Pin_1)
#define CHOICE2_5_OFF GPIO_SetBits(GPIOC, GPIO_Pin_1)
#define CHOICE2_6_OFF GPIO_SetBits(GPIOC, GPIO_Pin_0)
#define CHOICE2_7_OFF GPIO_SetBits(GPIOE, GPIO_Pin_6)
#define CHOICE2_8_OFF GPIO_SetBits(GPIOE, GPIO_Pin_5)

/*分别的控制点亮那一个数码管或是全亮全灭使能*/
#define CHOICE1_1   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_1_ON ;} //选择上排的第一个数码管亮,其他的都不亮。
#define CHOICE1_2   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_2_ON ;}//选择上排的第二个数码管亮,其他的都不亮。
#define CHOICE1_3   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_3_ON ;}//选择上排的第三个数码管亮,其他的都不亮。
#define CHOICE1_4   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_4_ON ;}//选择上排的第四个数码管亮,其他的都不亮。
#define CHOICE1_5   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_5_ON ;}//选择上排的第五个数码管亮,其他的都不亮。
#define CHOICE1_6   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_6_ON ;}//选择上排的第六个数码管亮,其他的都不亮。
#define CHOICE1_7   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_7_ON ;}//选择上排的第七个数码管亮,其他的都不亮。
#define CHOICE1_8   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_8_ON ;}//选择上排的第八个数码管亮,其他的都不亮。

#define CHOICE2_1   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_1_ON ;}//选择下排的第一个数码管亮,其他的都不亮。
#define CHOICE2_2   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_2_ON ;}//选择下排的第二个数码管亮,其他的都不亮。
#define CHOICE2_3   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_3_ON ;}//
#define CHOICE2_4   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_4_ON ;}//
#define CHOICE2_5   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_5_ON ;}//
#define CHOICE2_6   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_6_ON ;}//
#define CHOICE2_7   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_7_ON ;}//
#define CHOICE2_8   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE2_8_ON ;}//

/*数码管每段亮灭宏定义*/
#define D12_ON    GPIO_ResetBits(GPIOD, GPIO_Pin_12)
#define C6_ON      GPIO_ResetBits(GPIOC, GPIO_Pin_6)
#define D15_ON    GPIO_ResetBits(GPIOD, GPIO_Pin_15)   //这一位是数码管中的小数点
#define D11_ON    GPIO_ResetBits(GPIOD, GPIO_Pin_11)
#define D10_ON    GPIO_ResetBits(GPIOD, GPIO_Pin_10)
#define D14_ON    GPIO_ResetBits(GPIOD, GPIO_Pin_14)
#define D13_ON    GPIO_ResetBits(GPIOD, GPIO_Pin_13)
#define C7_ON      GPIO_ResetBits(GPIOC, GPIO_Pin_7)

#define D12_OFF   GPIO_SetBits(GPIOD, GPIO_Pin_12)
#define C6_OFF     GPIO_SetBits(GPIOC, GPIO_Pin_6)
#define D15_OFF   GPIO_SetBits(GPIOD, GPIO_Pin_15)
#define D11_OFF   GPIO_SetBits(GPIOD, GPIO_Pin_11)
#define D10_OFF   GPIO_SetBits(GPIOD, GPIO_Pin_10)
#define D14_OFF   GPIO_SetBits(GPIOD, GPIO_Pin_14)
#define D13_OFF   GPIO_SetBits(GPIOD, GPIO_Pin_13)
#define C7_OFF     GPIO_SetBits(GPIOC, GPIO_Pin_7)

/***************************
         
         
         
            _________
           |     PD10    |
   PD11 |                | PD12
           |                |
           |_________|
           | PC7          |
  PD13 |                 | PC6
           |                |
           |_________|  O   PD15
             PD14
              


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

/*数码管显示不同的字符*/
#define ALLON   {D12_ON;  C6_ON;  D15_ON;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_ON;}     
#define ALLOFF  {D12_OFF; C6_OFF; D15_OFF; D11_OFF; D10_OFF; D14_OFF; D13_OFF; C7_OFF;}

#define SET_0   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_OFF;}   //数码管显示0
#define SET_1   {D12_ON;  C6_ON;  D15_OFF;  D11_OFF; D10_OFF; D14_OFF; D13_OFF; C7_OFF;}
#define SET_2   {D12_ON;  C6_OFF; D15_OFF;  D11_OFF; D10_ON;  D14_ON;  D13_ON;  C7_ON;}
#define SET_3   {D12_ON;  C6_ON;  D15_OFF;  D11_OFF; D10_ON;  D14_ON;  D13_OFF; C7_ON;}
#define SET_4   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_OFF; D14_OFF; D13_OFF; C7_ON;}
#define SET_5   {D12_OFF; C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_OFF; C7_ON;}
#define SET_6   {D12_OFF; C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_ON;}
#define SET_7   {D12_ON;  C6_ON;  D15_OFF;  D11_OFF; D10_ON;  D14_OFF; D13_OFF; C7_OFF;}
#define SET_8   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_ON;}
#define SET_9   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_OFF; C7_ON;}

#define SET_A   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_OFF; D13_ON;  C7_ON;}//数码管显示A
#define SET_B   {D12_OFF; C6_ON;  D15_OFF;  D11_ON;  D10_OFF; D14_ON;  D13_ON;  C7_ON;}
#define SET_C   {D12_OFF; C6_OFF; D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_OFF;}
#define SET_D   {D12_ON;  C6_ON;  D15_OFF;  D11_OFF; D10_OFF; D14_ON;  D13_ON;  C7_ON;}
#define SET_E   {D12_OFF; C6_OFF; D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_ON;}
#define SET_F   {D12_OFF; C6_OFF; D15_OFF;  D11_ON;  D10_ON;  D14_OFF; D13_ON;  C7_ON;}
#define SET_G   {D12_OFF; C6_ON;  D15_OFF;  D11_ON;  D10_ON;  D14_ON;  D13_ON;  C7_OFF;}
#define SET_H   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_OFF; D14_OFF; D13_ON;  C7_ON;}
#define SET_L   {D12_OFF; C6_OFF; D15_OFF;  D11_ON;  D10_OFF; D14_ON;  D13_ON;  C7_OFF;}
#define SET_U   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_OFF; D14_ON;  D13_ON;  C7_OFF;}
#define SET_Y   {D12_ON;  C6_ON;  D15_OFF;  D11_ON;  D10_OFF; D14_ON;  D13_OFF; C7_ON;}
#define SET_J   {D12_ON;  C6_ON;  D15_OFF;  D11_OFF; D10_OFF; D14_ON;  D13_ON;  C7_OFF;}
#define SET_P   {D12_ON;  C6_OFF; D15_OFF;  D11_ON;  D10_ON;  D14_OFF; D13_ON;  C7_ON;}

TOP

上面的数码管显示字符是所有的数码管同时显示同一个字符,如果要控制某一位数码管单独显示一个字符的话,就SET_*和CHOICE1_*  /  CHOICE2_*来配合使用了。这一功能将会在我们后面的函数里面实现。

TOP

非常不错,人机界面的板上基本功能的实现基本上已经OK了,顶!
软件开发非常繁琐,希望可以继续加油,辛苦!

TOP

回复 40# panfeng881112


    #define CHOICE1_1   {CHOICE1_NOCE;CHOICE2_NOCE;CHOICE1_1_ON ;}

上面的的CHOICE1_NOCE在哪里定义了?
CHOICE2_NOCE在哪里定义了?

TOP

本帖最后由 panfeng881112 于 2010-11-1 08:35 编辑

昨天就发现这4句没有写上去,想编辑补上去来着,结果超过了20分钟不能再进行编辑了,呵呵~~

在这里补上


#define CHOICE1_ALL         {CHOICE1_1_ON;CHOICE1_2_ON;CHOICE1_3_ON;CHOICE1_4_ON;CHOICE1_5_ON;CHOICE1_6_ON;CHOICE1_7_ON;CHOICE1_8_ON;}           //点亮上排数码管

#define CHOICE1_NOCE         {CHOICE1_1_OFF;CHOICE1_2_OFF;CHOICE1_3_OFF;CHOICE1_4_OFF;CHOICE1_5_OFF;CHOICE1_6_OFF;CHOICE1_7_OFF;CHOICE1_8_OFF;}    //下灭上排数码管

#define CHOICE2_ALL         {CHOICE2_1_ON;CHOICE2_2_ON;CHOICE2_3_ON;CHOICE2_4_ON;CHOICE2_5_ON;CHOICE2_6_ON;CHOICE2_7_ON;CHOICE2_8_ON;}        //点亮下排数码管

#define CHOICE2_NOCE         {CHOICE2_1_OFF;CHOICE2_2_OFF;CHOICE2_3_OFF;CHOICE2_4_OFF;CHOICE2_5_OFF;CHOICE2_6_OFF;CHOICE2_7_OFF;CHOICE2_8_OFF;}      //熄灭下排数码管

TOP

感觉复位键可是另行设置,在前面板  或侧面  可能会很不方便

TOP

回复 45# whj


    确实如此。下版液晶方案要考虑更多些

TOP

前面板的设计 我觉得 应该在做出一个按键 复位键可以试着在那五个键的旁边  具体的  方式我还是回去再做吧  样子可能会有一定的改变 我试试

TOP

这个的是利用昨天晚上发的宏定义写的函数(未调试

void SET_led(int n,char m,int p)   //第n个数码管 显示m  p为0时小数点亮,否则不亮
{
       ALLOFF;
       switch(n)
       {
              case 1 :CHOICE1_1;break;
              case 2 :CHOICE1_2;break;
              case 3 :CHOICE1_3;break;
              case 4 :CHOICE1_4;break;
              case 5 :CHOICE1_5;break;
              case 6 :CHOICE1_6;break;
              case 7 :CHOICE1_7;break;
              case 8 :CHOICE1_8;break;
              case 9 :CHOICE2_1;break;
              case 10:CHOICE2_2;break;
              case 11:CHOICE2_3;break;
              case 12:CHOICE2_4;break;
              case 13:CHOICE2_5;break;
              case 14:CHOICE2_6;break;
              case 15:CHOICE2_7;break;
              case 16:CHOICE2_8;break;
              default : ALLON;      
       }
       switch(m)
       {   
              case '0':SET_0;break;
              case '1':SET_1;break;
              case '2':SET_2;break;
              case '3':SET_3;break;
              case '4':SET_4;break;
              case '5':SET_5;break;
              case '6':SET_6;break;
              case '7':SET_7;break;
              case '8':SET_8;break;
              case '9':SET_9;break;
              case 'A':SET_A;break;
              case 'B':SET_B;break;
              case 'C':SET_C;break;
              case 'D':SET_D;break;
              case 'E':SET_E;break;
              case 'F':SET_F;break;
              case 'P':SET_P;break;
              default : ALLON;
       }
       switch(p)
       {
              case 0 : D15_ON;break;
              default : D15_OFF;
       }   
}

这个函数只能让驱动一个数码管显示某一个字符
若要让16个数码管都工作的话则需要调用该函数另写一个函数

TOP

本帖最后由 panfeng881112 于 2010-11-1 20:55 编辑

这两个是调用上面的SET_led()函数实现控制16位数码管(同时)显示字符的方法。
这里是利用了人的视觉反应时间来实现的“同时”,并不是真正的同时。(未调试)

void SET_up(char a1,char a2,char a3,char a4,char a5,char a6,char a7,char a8,u8 p)    //  在数码管上排显示一串字符  
{                                                                                        //   对于SER_up()里的参数p
                                                                                         //   p有8位 0000 0000  每一位的值确定相
       SET_led(1,a1,p&0X80);                                                //    对应的一个数码管小数点是否点亮
        Delay(10);                                                                  //   为0时点亮对应的小数点
       SET_led(2,a2,p&0X40);                                                //   为1时熄灭对应的小数点
        Delay(10);                                                                  //
       SET_led(3,a3,p&0X20);                                                //
        Delay(10);                                                                 //
       SET_led(4,a4,p&0X10);                                                //
        Delay(10);                                                                 //
       SET_led(5,a5,p&0X08);                                                //
        Delay(10);                                                                 //
       SET_led(6,a6,p&0X04);                                                //
        Delay(10);                                                                 //
       SET_led(7,a7,p&0X02);                                                //
        Delay(10);                                                                  //
       SET_led(8,a8,p&0X01);                                                //
        Delay(10);           
}                                                                                                                                                                                       
void SET_down(char a1,char a2,char a3,char a4,char a5,char a6,char a7,char a8,u8 p)    //  在数码管下排显示一串字符  
{
       SET_led(9,a1,p&0X80);
        Delay(10);
       SET_led(10,a2,p&0X40);
        Delay(10);
       SET_led(11,a3,p&0X20);
        Delay(10);
       SET_led(12,a4,p&0X10);
        Delay(10);
       SET_led(13,a5,p&0X08);
        Delay(10);
       SET_led(14,a6,p&0X04);
        Delay(10);
       SET_led(15,a7,p&0X02);
        Delay(10);
       SET_led(16,a8,p&0X01);
        Delay(10);
}

在调用这两个函数来实现16位数码管显示时,需要增加它们的实现次数。

例如:
while(1)
{
       SET_up(*******);
       SET_down(******);
}

或者:
for(i=0;i<100;i++)
{
       SET_up(*******);
       SET_down(******);
}
否则显示次数太少会看不到效果

TOP

开源控制器1.1V说明Microsoft Word 文档 (2).rar (644.92 KB)
内部使用说明书  请参加明年挑战杯的同学一定要下来看  方瑞敏等人要看

TOP

返回列表

最新关注 关闭


关于论坛注册,最新修改,请网友们注意

由于最近大量垃圾信息出现在我们的论坛,为了营造一个良好的氛围,目前论坛只开发邀请注册,你可以点击以下链接自动邀请注册(如果有人使用了点击下一个试一试) ...


查看
珩源工控论坛热诚欢迎您联系我们进行合作!

Powered by Discuz! 7.2© 2001-2009 Comsenz Inc.

珩源工控论坛 ( 桂ICP备19004328号) |论坛统计|WAP| 客服中心-www.hymcu.com
  

GMT+8, 2024-4-18 16:27, Processed in 1.078283 second(s), 6 queries, Gzip enabled.