新问题
read_max6675()改进 #169
评论
|
这可能会解决马林的其他问题(使用带有MAX 6675的TC)!!! 我有几个文件可以把马林锁在指纹的一部分。 有了这个修复到位,我已经打印了4/4的打印通常锁定。 |
|
建议的补丁解决了我的问题与无声锁定在打印以及。每一个其他打印过去都会锁定,但在应用修复后,我现在已经打印了一些多小时的对象,没有锁定的迹象。好极了!请将此输入官方代码! |
|
这解决了我的打印问题,没有副作用已经显示在许多打印在过去两个月。 要把这个放进后备箱需要做些什么? |
|
我还有一个MAX 6675问题。不知道有没有关系; 我使用马林与PID自动调谐。 我发出“M109 S230”(将挤出机温度设置为230 C并等待达到该温度)。在大约1/5的时间内,目标温度将超过/低于正常温度一段时间(可能接近目标温度1-2分钟)。 突然,读取温度将在瞬间下降20-30度,电子设备开始补偿,以再次达到目标温度。达到目标温度并开始打印。打印最高温度几秒钟后,温度高于目标温度20- 30 ℃,打印停止。 |
|
我已经看到温度测量变化20-30摄氏度,我归因于噪音拿起的TC。我经常看到温度测量下降时,挤出机打开。这偶尔会关闭我对min temp的第一次打印的一天,但短暂的光点挤出机加热足以过去的下降,下次我击中打印。试着在给系统的不同部分通电时监控温度(尤其是挤出机)。 如果您看到温度的瞬时变化,则可能是噪声到达TC。移动挤出机和TC电线可能会有所帮助。您可以找到应用笔记,其中包含有关最大限度降低噪点的建议。 |
|
我想你是对的。我的温度下降问题的问题似乎无关的问题,由您张贴的补丁修复。 (But然后固件,并注意,我不是一个程序员,必须以某种方式提出的温度阅读与以前的读数,因为温度缓慢恢复后,突然下降,而不是立即恢复。) 回到第169期。何时与官方代码合并有消息吗? |
|
可能有一些过滤正在进行,这将导致温度缓慢恢复,或者这可能是真正发生的事情。 |


我不太了解如何使用Git来改进,但是下面的代码应该可以替换temperature.cpp中的内容。
最大的变化是从机选择低电平与SCLK启动之间的延迟(1)被删除。 MAX6675只需要100nsec,而Atmel需要610usec才能输出第一个时钟,因此不需要额外的延迟。 这减少了1毫秒的最大时间来执行这个函数(它是在一个isr中调用的。
定义加热间隔250
如果定义加热器_0_使用_MAX6675
静态长时间最大值6675_先前_分钟= -加热_间期;//初始化,以便第一次调用将更新阅读。
整数最大值6675_温度= 2000;
/*!
使用SPI总线读取MAX6675热电偶。
MAX6675执行冷结补偿,并将来自K型热电偶的信号数字化。
数据以12位分辨率、SPI™兼容、只读格式输出。
该转换器的温度分辨率为0.25°C,允许读数高达+1024°C,在0°C至+700°C温度范围内,热电偶精度为8 LSB。
定时器isr每8毫秒调用一次此函数。
相关MAX6675时序:
CSB下降至SCK上升 tCSS CL = 10pF最小值100 ns。
CSB下降至输出使能 tDV CL = 10pF,最大值为100 ns。
CSB上升至输出禁用 tTR CL = 10皮法100纳秒
SCK下降至输出数据有效tDO CL = 10pF 100 ns
/
整数读取_最大值6675()
{
/
看看是不是该更新温度读数了。
/
如果(毫秒()-最大值6675_先前_毫秒加热_间期)< HEAT_INTERVAL)
{
返回最大值6675_温度;//不更改该值。回来吧。
}其他
{/
该读数了。
重置先前的_millis。
/
最大值6675_先前_百万分之一=百万分之一();
}
/
要使能SPI模块,必须将功耗降低SPI位PRSPI写入0。
*/
#如果定义 PRR
PRR =~(1PRSPI);&= ~(1<<PRSPI);
#elif定义PRR0
PRR_0 =~(1)PRSPI;&= ~(1<<PRSPI);
结束编号
/*
初始化
/
SPCR =(1个MSTR)<<(1个SPE)|(1个SPR0);<<SPE) | (1<<SPR0);
/
拉低所需从机的从机选择SS引脚时,SPI主机启动通信周期。
/
写入(MAX6675_SS,0); //使能TT_MAX6675从机选择。
#如果(0)
/
我在运行1Mhz SPI的16Mhz Mega上测得SS和SCLK之间的延迟为610usec,没有任何延迟。
不需要任何延迟即可实现MAX6675所需的100nsec延迟。 但是如果你想要延迟,使用delayMicroseconds()而不是原来的毫秒延迟()。
/
延迟微秒(1); //确保从机选择后时钟启动前延迟100ns。
结束编号
/
MAX的第一位在从机选择变为低电平和时钟启动的100nsec内可用。
所有位将在16 * sclk +100nsec内逐个输入。
SPI系统在接收方向上采用双缓冲。
这意味着必须先从SPI数据寄存器(SPDR)读取第一个字符,然后才能完全移入下一个字符。
否则,第一个字节丢失。
*/
//读取MSB。
SPDR = 0 ;//启动SPI时钟发生器。
对于(;(SPSR(1 SPIF))== 0;&);<<SPIF)) == 0;);
最大6675_温度= SPDR 8;<<8;
//读取LSB,不需要读取SPDR。
SPDR = 0;
对于(;(SPSR(1 SPIF))== 0;&);<<SPIF)) == 0;);
最大值6675_温度|= SPDR;
写入(MAX6675_SS,1);//禁用TT_MAX6675从机选择。
/*
MAX6675在从机选择变为高电平的100纳秒内断开SPI总线。
*/
/*
检查热电偶是否开路。
位D2通常为低电平,如果热电偶输入开路,则变为高电平。
为了允许开路热电偶检测器工作,T-必须接地。
/
如果(最大值6675_温度4)& 4)
{
最大6675_温度= 2000; //热电偶开路
}其他
{/
底部三位是开路指示符、器件ID和三个状态位。
将这些位移出返回值。
*/
最大6675_温度= 3;>>=3;
}
返回最大值6675_温度;
} //读取最大值6675()。
恩迪夫