• UID362
  • 登录2020-09-19
  • 粉丝24
  • 发帖78
  • 科研点数6点
优异服役勋章
论坛之星服役勋章
高级电子或计算机学者
二级优质勋章
陈科帝 发布于2016-08-15 23:12
5/2738

火箭发动机测力台(三)

楼层直达
继上两篇帖子


先把程序发上来,这是是STM32的。


遥控器端程序发射程序.zip


测力计端程序
接收程序.zip


然后是接线方式
继上次的图便于说明

图片:{{3@`]6CIA3A7T1@EN6NGOP.png



电源部分就不说了。。。。


OLED接线方式
CS---------PA5
RST-------PB7
RS---------PB6
SCLK-----PB9
SDIN------PB8

NRF24L01接线方式
CE-------PB0
IRQ------PB1
CSN-----PA4
SCK-----PA5
MISO----PA6
MOSI----PA7


继电器接线方式
继电器1------PD3
继电器2------PD5


测力计接线方式
SCK---PB10
DT-----PB11


然后是遥控器部分

图片:L3%7XX2$(]WK9DZ9VXY_7KY.png


NRF24L01与OLED接线方式同测力计端方式一样
关于矩阵键盘
8个接口分别对应
PD0------PD7




图片:IMG_20160806_205016.jpg



键位说明
A-----发射按钮(输入好密码点击发射,就会成功出发接收端的点火器哟)
B-----清空按钮(什么密码输错了怎么办?需不需要重启复位啊?不要这么麻烦,按一下B就好了)
C-----手动改测力计采集频率按钮(按下去后会将测力器端的采集频率改为1次每秒,肉眼观察到发动机燃烧完毕后,按一下。妈妈再也不用担心无用数据太多啦)
D-----这个按钮什么用都没有哟
* -----同上(╯-_-)╯╧╧(你们可以自己开发啦)
#-----同上上( ▼-▼ )(年轻人自己开发吧,不要怂,就是干!)


*******************************************************我是分隔线******************************************************************(哼ヽ(≧Д≦)ノ,就是这么傲娇)
然后简单讲一讲程序了吧
首先是遥控器端(发射端)


先是矩阵键盘驱动代码,超简单哒。
一次一次的扫描

unsigned char KeyScan(void)
{
 line_0 = 0;
 line_1 = 1;
 line_2 = 1;
 line_3 = 1;
 if(!list_0) return 1;
 
 else if (!list_1) return 2;
 else if (!list_2) return 3;
 else if (!list_3) return 4;


 line_0 = 1;
 line_1 = 0;
 line_2 = 1;
 line_3 = 1;
 if(!list_0) return 5;
 else if (!list_1) return 6;
 else if (!list_2) return 7;
 else if (!list_3) return 8;
 
 line_0 = 1;
 line_1 = 1;
 line_2 = 0;
 line_3 = 1;
 if(!list_0) return 9;
 else if (!list_1) return 10;
 else if (!list_2) return 11;
 else if (!list_3) return 12;
 
 line_0 = 1;
 line_1 = 1;
 line_2 = 1;
 line_3 = 0;
 if(!list_0) return 13;
 else if (!list_1) return 14;
 else if (!list_2) return 15;
 else if (!list_3) return 16;
 
 else
  {
 a=0;
 return 17;
 }
 
 line_0 = 1;
 line_1 = 1;
 line_2 = 1;
 line_3 = 1;
 
  list_0 = 1;
  list_1 = 1;
  list_2 = 1;
  list_3 = 1;
}
检测到相应按键被按下就会返回对应一个值,比如说按下1键便会返回1这个值
然后看主程序中

if(x==1&&a==0)
 {
  a=1;//先将标志位置1
  y=10*y+x;//Y就会加1位1
  OLED_ShowNum(5,0,x ,3,12);//显示X
  OLED_ShowNum(5,20,y ,6,12);//显示Y
  OLED_Refresh_Gram(); //刷新PLED
 }
再来看看发射按钮

if(x==4&&a==0)//A键发送
 {
  a=1; //先将标志位置1
  Password=y;
  Tx_Buf1[0]=Password/256;
  Tx_Buf1[1]=Password%256;
  NRF24L01_TxPacket(Tx_Buf1); //发送这个数组
 }
这个就简单介绍到这里。
关于OLED驱动,NRF驱动什么的。。基本都是网上这里捞捞,那里复制复制。。。
说以也没什么讲的了。。




关于测力计端口
首先看一下中断函数中(20ms进入一次中断)

 if(TIM3->SR&0X0001)
 {        
  a1++;          //a1默认值是0
  if(a1>=a2)  //a2默认值是50,所以再未点火前只有当a1等于50的时候才会向SD卡中写入一次,即50*20ms=1秒,一秒写入一次
         {
    a1=0;
           xieSD();  //向SD卡写入数据
   }
  }


然后是主函数中

     if(shuju==10203)
 {
 a2=0;                 //直接将a2变为0,那么之前的一秒写入一次数据变为20ms写入一次数据,这也是点火的时候。
 jidianqi1=1;  
 jidianqi2=1;        //两个继电器同时激活
                       delay_ms(100);   //延长继电器工作时间,保证点火成功率。
 }


然后是如何将写入速度再次改为1秒一次

 if(shuju==55555)
 {
 a2=50;  //灰常简单,将a2改为50即可。
 }


然后是关于写卡

int xieSD()
   {
 f_mount(0,&fs);
 itoa(PressCalcuate (), TXT_Str, 10);                                                                //一个转换函数,转为字符串
  
 res = f_open(&fnew, "0.txt", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
                res = f_lseek(&fnew, f_size(&fnew));                                                                //把指针指向文件末端
 res = f_write(&fnew,&TXT_Str, sizeof(TXT_Str), &bw);                                    //像记事本写入
 f_close(&fnew);                



//char enter=0xd;//char line_break=0xa; 这两个就是回车的 ASCII码了 写进去就相当于自动换行啦


 res = f_open(&fnew, "0.txt", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
                res = f_lseek(&fnew, f_size(&fnew));
 res = f_write(&fnew, &enter, sizeof(enter), &bw);                                             // 写入0x  ASCII码
 f_close(&fnew);  
 
 res = f_open(&fnew, "0.txt", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
                res = f_lseek(&fnew, f_size(&fnew));
 res = f_write(&fnew,&line_break, sizeof(line_break), &bw);                             //写入0xa   ASCII码
 f_close(&fnew);  
  
    f_mount(0, NULL);


    ii++;                   //写入一次ii加一,便于观察写入次数
  
  }




关于测力计程序,是之前从51上面移植过来的,其代码已经很成熟了,这里就不说明了。






上面的代码 仅供参考。
代码很乱很乱,,,,,,,没多少时间整理了,望见谅。
其还可以优化的地方很多很多,希望大家把自己的看法,意见,建议什么的,别藏着掖着啦,都“吐”出来吧(●ˇ∀ˇ●)


好啦,就这样啦。
  • UID362
  • 登录2020-09-19
  • 粉丝24
  • 发帖78
  • 科研点数6点
优异服役勋章
论坛之星服役勋章
高级电子或计算机学者
二级优质勋章
陈科帝 发布于2016-08-15 23:14
沙发F
对了这些注释什么的,程序上才没有呢。刚刚在文章上面加的注释。。。。
  • UID362
  • 登录2020-09-19
  • 粉丝24
  • 发帖78
  • 科研点数6点
优异服役勋章
论坛之星服役勋章
高级电子或计算机学者
二级优质勋章
陈科帝 发布于2017-07-21 19:16
板凳F
对了,几天前黄司机一套带走事件,有必要说明一下。不要带电拔插!不要带电拔插!不要带电拔插!
还有,不同测力计的线序颜色是不一样的!!!要根据测力计厂家提供的线序来接HX711。。。照着上面图的接线方式不一定能用。。。。
  • UID2116
  • 登录2018-07-19
  • 粉丝1
  • 发帖3
  • 科研点数0点
追星Maker纪念章
零度 发布于2018-04-07 17:53
地板F
呜呜呜呜,下载不了
  • UID362
  • 登录2020-09-19
  • 粉丝24
  • 发帖78
  • 科研点数6点
优异服役勋章
论坛之星服役勋章
高级电子或计算机学者
二级优质勋章
陈科帝 发布于2018-04-10 17:52
4楼F
零度:呜呜呜呜,下载不了回到原帖
可以下载啊。
  • UID2116
  • 登录2018-07-19
  • 粉丝1
  • 发帖3
  • 科研点数0点
追星Maker纪念章
零度 发布于2018-04-14 14:13
5楼F
陈科帝:可以下载啊。回到原帖
等级不够
您需要登录后才可以回帖
发表回复

杩斿洖椤堕儴