找回密码
 立即注册
查看: 78|回复: 5

用一片STC来做个光栅尺的可行性

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:134
  • 最近打卡:2026-04-29 08:42:58

13

主题

36

回帖

793

积分

高级会员

积分
793
发表于 2026-4-21 14:12:12 | 显示全部楼层 |阅读模式
芯片用STC32G12K128 有更适合更好

#include "STC32G.h"
框架如下:
//==================== 引脚定义 ====================
// 8相激励输出(对应40指动栅)
#define EXC1 P10
#define EXC2 P11
#define EXC3 P12
#define EXC4 P13
#define EXC5 P14
#define EXC6 P15
#define EXC7 P16
#define EXC8 P17

// 2路正交信号输入
#define SIGA P20
#define SIGB P21

// 按键
#define KEY_MM  P30  // inch/mm
#define KEY_ON  P31  // ON/OFF
#define KEY_ZERO P32 // ZERO

// LCD驱动(示例:4COM + 8SEG)
#define COM1 P00
#define COM2 P01
#define COM3 P02
#define COM4 P03

#define SEG_A P04
#define SEG_B P05
#define SEG_C P06
#define SEG_D P07

//==================== 全局变量 ====================
int32_t position = 0;
uint8_t phase = 0;
bit power_on = 1;
bit inch_mode = 0;
uint16_t idle_timer = 0;

// 段码表(0~9,LCD定义修改)
const uint8_t seg_table[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//==================== 基础函数 ====================
void delay_ms(uint16_t ms)
{
    uint16_t i,j;
    for(i=0;i<ms;i++)
        for(j=0;j<1000;j++);
}

// 8相激励输出
void excite_drive(void)
{
    EXC1=EXC2=EXC3=EXC4=EXC5=EXC6=EXC7=EXC8=0;
    switch(phase)
    {
        case 0: EXC1=1; break;
        case 1: EXC2=1; break;
        case 2: EXC3=1; break;
        case 3: EXC4=1; break;
        case 4: EXC5=1; break;
        case 5: EXC6=1; break;
        case 6: EXC7=1; break;
        case 7: EXC8=1; break;
    }
    phase = (phase + 1) % 8;
}

// 正交信号4倍频解码
void read_sensor(void)
{
    static uint8_t last_a;
    uint8_t a = SIGA;
    uint8_t b = SIGB;

    if(a != last_a)
    {
        if(a != b) position++;
        else position--;
    }
    last_a = a;
}



回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2026-04-30 08:56:47

849

主题

1万

回帖

2万

积分

管理员

积分
23131
发表于 2026-4-21 15:41:13 | 显示全部楼层
截图202604211540127411.jpg


截图202604211541107058.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2026-04-30 08:56:47

849

主题

1万

回帖

2万

积分

管理员

积分
23131
发表于 2026-4-21 15:55:24 | 显示全部楼层
STC32G12K128如何做光栅









[color=rgb(6, 10, 38) !important]STC32G12K128是一款性能强大的国产32位单片机,它本身并不能“做”光栅,但可以作为核心控制器,来处理来自光栅传感器的信号,从而实现诸如计数、测速、测角等应用。
这里所说的“光栅”通常指的是光栅传感器(也称光电编码器),它是一种通过光栅的光学遮挡原理来输出脉冲信号的装置。
下面为你详细解析如何使用STC32G12K128来处理光栅信号。
🧠 核心原理光栅传感器会输出两路相位差为90度的方波脉冲信号,通常称为A相和B相。
  • 计数:通过计算脉冲的数量,可以得知物体移动的距离或旋转的角度。
  • 测速:通过计算单位时间内的脉冲数量,可以得出速度。
  • 辨向:通过判断A相和B相信号的相位先后关系,可以确定运动的方向(正转或反转)。
STC32G12K128的优势在于其内部集成了多个定时器/计数器,并且支持硬件正交解码功能。这意味着你可以将光栅的A、B相信号直接连接到单片机的特定引脚上,由硬件自动完成脉冲计数和方向判断,极大地减轻了CPU的软件负担,保证了计数的准确性和实时性。
🔧 实现步骤1. 硬件连接
  • 电源:将光栅传感器的VCC和GND分别连接到STC32G12K128的5V(或3.3V)和GND引脚。
  • 信号线:将光栅传感器的A相和B相信号输出线,连接到STC32G12K128支持定时器输入捕获或正交解码功能的I/O口。具体引脚需要查阅STC32G的数据手册,通常是T0、T1、T2等定时器对应的外部输入引脚。
2. 软件配置软件部分的核心是配置定时器工作在计数器模式或正交解码模式。
  • 查阅手册:首先,你需要找到STC32G系列单片机的数据手册,确认哪个定时器(如Timer0, Timer1)支持外部脉冲输入和正交解码功能,并找到对应的引脚。
  • 配置定时器:
    • 将定时器设置为计数器模式(Counter Mode),而非定时模式(Timer Mode)。
    • 如果单片机支持硬件正交解码,则配置相应的寄存器,使能该功能。这样,硬件会自动根据A、B相的相位关系进行加计数或减计数。
    • 如果不支持硬件正交解码,可以只连接A相,将定时器配置为对A相脉冲进行计数。方向判断则需要通过外部中断读取B相的电平状态来由软件实现。
  • 读取数据:在主程序循环或定时器中断中,直接读取定时器的计数值(如TL0, TH0寄存器),这个值就是光栅产生的脉冲数。
3. 数据处理
  • 计算位移/角度:位移 = 脉冲数 × 光栅分辨率。光栅分辨率是指每个脉冲代表的物理长度或角度。
  • 计算速度:可以通过一个固定时间(如100ms)内的脉冲数来计算,或者通过测量两个脉冲之间的时间间隔来计算。
⚠️ 重要区分:光栅 vs. 光电循迹需要特别注意的是,不要将“光栅”与“光电循迹”混淆。
  • 光栅/编码器:输出的是数字脉冲信号,用于精确的计数和测速。
  • 光电循迹/灰度传感器:通常使用红外对管(如TCRT5000),通过检测地面反射光的强度来判断黑白线。它输出的是模拟电压信号,需要连接到单片机的ADC(模数转换器)引脚进行处理。STC32G12K128内置了高性能的ADC,非常适合处理这类传感器信号。
总而言之,使用STC32G12K128处理光栅信号,关键在于利用其定时器/计数器的硬件功能来高效、准确地读取脉冲,而不是通过软件去模拟或轮询。





























回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2026-04-30 08:56:47

849

主题

1万

回帖

2万

积分

管理员

积分
23131
发表于 2026-4-21 15:56:14 | 显示全部楼层
千问在手,敌可望,STC 亦可往
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-21 16:06:43 | 显示全部楼层
神*** 发表于 2026-4-21 15:56
千问在手,敌可望,STC 亦可往

千问哪个模型适合单片机
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:134
  • 最近打卡:2026-04-29 08:42:58

13

主题

36

回帖

793

积分

高级会员

积分
793
发表于 2026-4-22 10:59:55 | 显示全部楼层
谢谢回复 调整方向,非接触性的类似码识别
有这方面资料
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:31 , Processed in 0.119794 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表